3 ms·
In practice, undefined behavior is unpredictable because compiler does optimization with the assumption that you do not have undefined behavior. When you do hav
by netheril96 11y ago
In practice, undefined behavior is unpredictable because compiler does optimization with the assumption that you do not have undefined behavior. When you do have them, the optimization won't preserve the "as-if" rule.
The same applies to Java/C# when data race is present. The JIT must be generating optimized codes assuming that no data race occurs, because it is impossible to detect or correct them (at least in current implementation). When you do have data race, the bugs will be as subtle and Schrödinger's as if data race occurs in a C program.
- the_why_of_y 11y agoData races in Java/C# races will result in incorrect values (which may be serious if your program is doing anything important and subtle to find, as you say), but they will not ever result in "undefined behavior" in the way ISO C defines the term. Specifically a data race in Java/C# will not cause your program to do out-of-bounds memory accesses or use-after-free or corrupting unrelated objects because other parts of the respective VM specifications prevent such outcomes. For the details see e.g. http://docs.oracle.com/javase/specs/jls/se8/html/jls-17.html#jls-17.4.5 http://docs.oracle.com/javase/specs/jls/se8/html/jls-17.html...