- - PR -
lockステートメントとMutexクラスのペナルティはほぼ同等でしょうか
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-11-18 09:48
Q1.
スレッドの同期を制御する場合、制御自体のペナルティは lockステートメントとMutexクラスとでは実質同等レベルと考えて良いのでしょうか? Q2. lockステートメントもMutexクラスもWindowsの同じAPIが呼び出しているのでしょうか? (Q1と同じ意味の質問ですが) |
|
投稿日時: 2005-11-18 09:58
こんにちは。
A1.A2. 違います。 クリティカルセクションとミューテックスで調べてみてください。 lock はクリティカルセクションです。 _________________ 囚人のジレンマな日々 |
|
投稿日時: 2005-11-18 10:46
NAL-6295です。
適用される範囲もちがいますね。 |
|
投稿日時: 2005-11-20 23:55
回答ありがとうございます。
Mutexの説明に下記の記載がありました。 スレッド間およびプロセス全体で同期をとるには、Mutex オブジェクトを使用します。 Mutex には、Monitor クラスの待機機能とパルス機能がすべて備わっているわけでは ありませんが、プロセス間で使用できる名前付きミューテックスの作成機能が用意さ れています。 しかし、 同一プロセスのスレッド間で同期を取る場合、論理的にはlockステートメント (クリティカルセクション)とMutexクラスの両方が使えますが、どちらがより 「軽い」のでしょうか?スレッド切り替えオーバヘッドについて記載された 比較資料を見つけることができませんでした。 宜しくお願いします。 |
|
投稿日時: 2005-11-21 01:25
回答にはなってないかもしれませんが、
○複数プロセス間で同期処理が必要な場合 -> 名前付きMutex ○単一プロセス内の複数スレッド間で同期処理が必要な場合 -> System.Threading.Monitor(クリティカルセクション) or lock と考えればよいと思います。 これまた直接的な回答ではありませんが、参考にこんな記事があります。 「マルチスレッド アプリケーションについてすべての開発者が知っておかなければならないこと」 https://www.microsoft.com/japan/msdn/msdnmag/issues/05/08/Concurrency/default.aspx ※読むには .NET Passport アカウントが必要です。 |
|
投稿日時: 2005-11-21 11:09
返答ありがとうございます。
同一プロセス内であればミューテックス(Mutexクラス)より クリティカルセクション(lockステートメントやMoniterクラス) のほうが高速であることが分かりました。 短時間でできる汎用の同期オブジェクト http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpdndllpro/htm/metrsect.asp |
1