-2

回答、コメント、およびjls-17.4.2を見た後の受け入れ可能な回答

1)反対称プロパティは、次のように保持されます-user3707125

2) ロック間の hb 関係は、実際にはロック解除とロック hb(ul, l) の間であり、hb(l, ul) とは異なります。ヒントは - shmosel
From JSL -

モニターのロック解除は、そのモニターの後続のすべてのロックの前に発生します。

3) ジェームス・ラージによる hb の合理的な説明


実際の質問は次のとおりです。

Java メモリ モデル (JMM) の記述は、いくつかのアクション間の関係の前に発生します。"x" と "y" が h(x,y) 関係を持つ 2 つのアクションの場合。JMM はまた、実装 (コンパイラ、ランタイム、またはハードウェア) は、「x」と「y」を順番に実行した場合と同じ結果を達成する場合、これらの実行を自由に並べ替えることができると述べています。

だから私は思う、

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

私は正しいですか?それとも私は何かを逃しましたか?

更新:
ロックを伴うアクションについても、hb 関係を確立する方法を教えてください。異なるスレッドによるロックのイベントはプログラムの順序で定義できず、決定論的ではなく、命令やスケジューラなどのいくつかの要因に依存するため、
2 つのロック アクション - l1 と l2 の間で関係を定義する方法 hb(l1 , l2) または hb(l2, l1)。どちらも受け入れられるようです。この場合、どちらも同じように見えます。
l1 と l2 は、同じオブジェクトに対するロック アクションです。 l1 と l2 はロックではありません

明確化(コメントに基づく):異なるスレッドによって同じオブジェクトに対してロックが行われる場合、ロックアクションは明らかに相互に排他的です。

4

1 に答える 1

0

はい、実装は操作を並べ替えることができますが、合理的な制限内でのみ可能です。これは、Java 言語仕様 (JLS) で定義されたリレーションシップが存在する前に発生し、並べ替え可能なものの制限を明確に定義します。

JLS が x が y の前に発生すると言う場合、それは実装が x の前に発生する yの外観を作成する並べ替えを行うことを許可されていないことを意味します。

于 2016-09-02T11:28:51.890 に答える