【发布时间】:2015-01-06 00:28:50
【问题描述】:
trylock 的不当使用
T1 T2
x = 42; while (lock.trylock())
lock.lock(); lock.unlock();
assert(x == 42);
在 java 和 c++ 内存模型中,都允许 x=42 在 lock(1) 之后移动。 因此断言可能在 T2 线程中失败。因此在 C++ 内存模型中 他们定义 trylock 失败的行为可能是虚假。 但我没有找到 java 内存模型中 trylock 的规格是什么。 可以在线程 2 中断言保证在 Java 中传递。参考会有所帮助!
【问题讨论】:
标签: java c++ concurrency memory-model java-memory-model