1

Boost Synchronizationに関するドキュメントを調べましたが、 aboost::unique_lockが順番にロックを達成するかどうかを判断できないようです。

つまり、2 つのスレッドが既にロックされているミューテックスをロックしようとして競合している場合、ロックが解除された後、ロックしようとする順序は維持されますか?

4

1 に答える 1

1

一意のロックはロックではありません (これは、任意の Lockable または TimedLockable 型で動作できるロック アダプターです。 cppreferenceを参照してください)。

スレッドがロック (または一般的なリソース) を取得する順序は、実装で定義されている可能性があります。通常、これらの実装には十分に文書化されたスケジューリング セマンティクスがあるため、アプリケーションはリソース不足、ソフトロック、デッドロックを回避できます。

興味深い例として、条件変数は、ミューテックスの下でシグナルを送信するように注意した場合にのみ、スケジューリングの順序を保持します (そうしない場合、スケジューリングが公正なスケジューリングに決定的に依存しない限り、通常は機能します)。

phtread_cond_signal

pthread_cond_broadcast()または関数は、スレッドが待機中に条件変数を呼び出すか関連付けpthread_cond_signal()たミューテックスを現在所有しているかどうかに関係なく、スレッドによって呼び出される場合があります。ただし、予測可能なスケジューリング動作が必要な場合、そのミューテックスは、またはを呼び出すスレッドによってロックされます。pthread_cond_wait()pthread_cond_timedwait()pthread_cond_broadcast()pthread_cond_signal()

于 2014-07-13T22:48:59.800 に答える