Tag: atomicity

“switch”语句评估是否是线程安全的?

请考虑以下示例代码: class MyClass { public long x; public void DoWork() { switch (x) { case 0xFF00000000L: // do whatever… break; case 0xFFL: // do whatever… break; default: //notify that something going wrong throw new Exception(); } } } 忘掉片段的无用性:我怀疑是关于switch语句的行为。 假设x字段只能有两个值: 0xFF00000000L或0xFFL 。 上面的开关不应该属于“默认”选项。 现在想象一个线程正在执行“x”等于0xFFL的开关,因此第一个条件将不匹配。 同时,另一个线程将“x”变量修改为0xFF00000000L。 我们知道64位操作不是primefaces操作,因此变量将首先将较低的dword置零,然后将较低的dword置零(反之亦然)。 如果在“x”为零时(即在新的分配期间)完成开关中的第二个条件,我们是否会陷入不受欢迎的“默认”情况?