不良使用trylock

T1                                   T2
x = 42;                              while (lock.trylock())
lock.lock();                               lock.unlock();
                                     assert(x == 42);

在Java和C++内存模型中,都允许x = 42在lock(1)之后移动。
因此assert可能在T2线程中失败。因此在C++内存模型中
他们定义了trylock失效的行为可能是 spurious
但是我没有找到Java内存模型中trylock的规范。
可以确保在线程2中断言可以传入Java 。引用会有所帮助!

推荐人: http://rsim.cs.illinois.edu/Pubs/08PLDI.pdf

最佳答案

从javadoc中获取Lock:

关于java - JMM和不希望使用的trylock,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27790268/

10-13 06:18