首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JMM与幽会的不良使用

JMM与幽会的不良使用
EN

Stack Overflow用户
提问于 2015-01-06 00:28:50
回答 2查看 117关注 0票数 1

不适当地使用幽会

代码语言:javascript
复制
T1                                   T2
x = 42;                              while (lock.trylock())
lock.lock();                               lock.unlock();
                                     assert(x == 42);

在java和c++中,内存模型都允许x=42在锁(1)之后移动。因此断言可能在T2线程中失败。因此,在C++记忆模型中,他们定义了尝试锁定的行为可能是。但是,我没有找到java内存模型中用于尝试锁的规范。可以在线程2中断言,保证在中传递。推荐信会有帮助的!

参考文献: http://rsim.cs.illinois.edu/Pubs/08PLDI.pdf

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-06 00:33:47

从javadoc到锁定

不成功的锁定和解锁操作以及重入锁定/解锁操作不需要任何内存同步效果。

票数 4
EN

Stack Overflow用户

发布于 2016-03-11 10:13:48

如果尝试锁成功地取得了锁,它将同步-与以前的锁由T1。通过锁语义,我们知道当我们进入循环时,T1不可能有先前的锁。因此,如果我们进入循环,就没有与T1相关的同步。

如果尝试锁失败(或何时),则不存在与T1相关的同步。至少,如果我们假设trylock失败是jtahlborn的答复建议的“不成功的锁定操作”。

因此,在任何情况下,在转让和断言之间的关系之前都不会发生。因此,我们有一个数据竞赛,x的值可能是42,也可能不是42。

我无法清楚地发现Java trylock可能是“虚假的”。但是,这个示例在Java中具有虚假的行为。

尽管如此,JavaDoc用于幽会

如果锁可用,则获取该锁,并立即返回值true。

但在我看来,语言规范胜过JavaDoc。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27790268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档