0

許容回答を見た後に答え、コメント、jls-17.4.2ですか?指し示すように)非対称性が成立

1 - user3707125

2)ロックの間のHB関係が HB(ULを、アンロックとロックの間に実際にl)はhb(l、ul)と同じではない。 JSLからshmosel
- - によって示唆した

Anが、モニターが起こる-前にそのモニタ上の後続のすべてのロックロックを解除します。

3)とジェームズ・大


によるHBの合理的な説明

実際の質問があった。

Javaのメモリモデル(JMM)が説明し、いくつかのアクション間の関係の前に起こります。 "x"と "y"がh(x、y)の関係にある2つのアクションである場合JMMはまた、 "x"を実行した後に "y"を実行するのと同じ結果が得られれば、実装(コンパイラ、実行時またはハードウェア)はこれらの実行を自由に並べ替えることができます。

は、だから私は右、その

hb(x,y) != hb(y,x) 

アムIと思いますか?それとも私は何かが恋しい?

更新:HB関係を確立することができますどのようにロックを伴う行為についても
。異なるスレッドによるロックのイベントはプログラムの順序では定義できず、決定論的ではなく、命令やスケジューラなどのいくつかの要因に依存します。
したがって、l1とl2の関係を定義する方法hb (l1、l2)またはhb(l2、l1)である。どちらも受け入れられると思われる。この場合、どちらも同じように見えます。
l1とl2は同じオブジェクトに対するロックアクションです。ロックが別のスレッドによって同じオブジェクト上で行われるべきである場合 ロックアクションは確かに相互に排他的である: L1およびL2は、(コメントに基づいて)

解明ロックありません。

+0

https://en.wikipedia.org/wiki/Happened-before - 「すべての厳密な部分的な注文と同様に、起こった関係は推移的で、反省的で、反対称的である**」 – user3707125

+2

なぜ同じであるのでしょうか? * x *が* y *より前に発生した場合、明らかに* y *は* x *より前には発生しません。 – shmosel

+0

私は一般的な意味で、どちらもwikiで指摘されているように正しいことを見ています - hbは逆称です。しかし、一般的なケースやJMMのアクションにおいても、これは何の違いも生じない多くの特別なケースがあります。ロックはアクションとして言います。ロックの間に確立される関係のみがありますが、順序はありません。うまくいけば私は正しい。 – samshers

答えて

0

はい、実装では操作を並べ替えることができますが、妥当な範囲内でのみ実行できます。 は、Java言語仕様(JLS)で定義されているリレーションシップの前に発生し、リオーダー可能なリミットの範囲を明確に定義します。

xがyの前にあると言われた場合、実装はではないことを意味します。ではxの前にyの出現を引き起こすような並べ替えは許可されません。

+0

秩序が重要ではないように思われる行為があるようです。同じように質問を更新しました。どうも。 – samshers

関連する問題