- PR -

lockステートメントとMutexクラスのペナルティはほぼ同等でしょうか

1
投稿者投稿内容
ひろし
ぬし
会議室デビュー日: 2002/09/16
投稿数: 390
お住まい・勤務地: 兵庫県
投稿日時: 2005-11-18 09:48
Q1.
スレッドの同期を制御する場合、制御自体のペナルティは
lockステートメントとMutexクラスとでは実質同等レベルと考えて良いのでしょうか?

Q2.
lockステートメントもMutexクラスもWindowsの同じAPIが呼び出しているのでしょうか?
(Q1と同じ意味の質問ですが)
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2005-11-18 09:58
こんにちは。

A1.A2.
違います。

クリティカルセクションとミューテックスで調べてみてください。
lock はクリティカルセクションです。

_________________
囚人のジレンマな日々
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2005-11-18 10:46
NAL-6295です。

適用される範囲もちがいますね。
ひろし
ぬし
会議室デビュー日: 2002/09/16
投稿数: 390
お住まい・勤務地: 兵庫県
投稿日時: 2005-11-20 23:55
回答ありがとうございます。
Mutexの説明に下記の記載がありました。
スレッド間およびプロセス全体で同期をとるには、Mutex オブジェクトを使用します。
Mutex には、Monitor クラスの待機機能とパルス機能がすべて備わっているわけでは
ありませんが、プロセス間で使用できる名前付きミューテックスの作成機能が用意さ
れています。
しかし、
同一プロセスのスレッド間で同期を取る場合、論理的にはlockステートメント
(クリティカルセクション)とMutexクラスの両方が使えますが、どちらがより
「軽い」のでしょうか?スレッド切り替えオーバヘッドについて記載された
比較資料を見つけることができませんでした。
宜しくお願いします。
chack
常連さん
会議室デビュー日: 2002/11/18
投稿数: 48
お住まい・勤務地: 埼玉県
投稿日時: 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 アカウントが必要です。
ひろし
ぬし
会議室デビュー日: 2002/09/16
投稿数: 390
お住まい・勤務地: 兵庫県
投稿日時: 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

スキルアップ/キャリアアップ(JOB@IT)