web-dev-qa-db-ja.com

「同期プリミティブ」の定義

用語同期プリミティブはどういう意味ですか?例:ミューテックス、クリティカルセクション、待機可能タイマー、イベント、モニター、条件変数、セマフォ。それらはすべて同期プリミティブですか?リストにない他の同期プリミティブはありますか?そして、これらは有効な質問ですか?

29
Loom

同期プリミティブは、スレッドまたはプロセスの同期をサポートする目的で、プラットフォーム(オペレーティングシステムなど)がユーザーに提供する単純なソフトウェアメカニズムです。これらは通常、下位レベルのメカニズム(アトミック操作、メモリバリア、スピンロック、コンテキストスイッチなど)を使用して構築されます。

ミューテックス、イベント、条件変数、セマフォはすべて同期プリミティブです。共有ロックと排他ロックも同様です。モニターは一般に、高レベルの同期ツールと見なされます。これは、他の同期プリミティブ(通常、待機とシグナリングをサポートするための条件変数による排他的ロック)を使用するメソッドの相互排除を保証するオブジェクトです。一部のコンテキストでは、モニターがビルディングブロックとして使用される場合、同期プリミティブとも見なされます。

重要なセクションは同期プリミティブではありません。これは、いくつかの不変条件を維持するために、同時実行から保護する必要がある実行パスの一部です。クリティカルセクションを保護するには、いくつかの同期プリミティブを使用する必要があります。

38
Adam Zalcman

@Loomで提案されているように、コロンビア大学から提供された this list を質問への回答として追加しています。

また、2017年3月3日付けの この記事 Microsoftからもチェックしてください(私は古いと感じていますが、コロンビア大学の記事もそうです)。

私が収集したものから、同期プリミティブは公式なリストがないという意味で、明確に定義されていません。

5
zook2005