mutexについて – プログラミング – Home

通知
すべてクリア

mutexについて


てんてん
 てんてん
(@てんてん)
ゲスト
結合: 21年前
投稿: 16
Topic starter  

スレッド間の排他でmutexを使えると思うのですが、
どうやって確実に排他をしているのでしょうか?

たとえば
スレッドAとスレッドBがあるとします。
物理コアが2つ以上あり、各スレッドはコアが分かれているとします。
こういう場合は、本当にスレッドは並列に処理されるのですよね?
スレッドAとスレッドBでジャストなタイミングで、同一のmutexに
waitforでロックをかけた場合、どういう理屈で不整合が起こらないように
なっているのでしょうか?

想像として
・CPUへのバスが1本だから大丈夫なのか?
・キューイングしているから大丈夫なのか?(この場合はキューイングの際の排他が気にな
りますが。。。)

VC++とはあんまり関係なかもしれませんが、こちらで質問させていただきます。


引用解決済
トピックタグ
瀬戸っぷ
 瀬戸っぷ
(@瀬戸っぷ)
ゲスト
結合: 18年前
投稿: 178
 

OS内部の同期オブジェクトを扱う処理を1つのコア(というかスレッド?)で行うようにする。
とか………。
システムコールに入ったら、リソースの競合などもあるので他のスレッドは待機状態にな
る…とか。

Windowsではカーネルのコードは観れませんから…Linuxカーネルのコード追ってみるとか。


返信引用
tetrapod
 tetrapod
(@tetrapod)
ゲスト
結合: 21年前
投稿: 830
 

この辺の「ロック」機構について正しく理解するには、
キャッシュ無効化とかメモリバリアとか
そっち系の hardware に関する知識が無いと理解できないんだが・・・

x86 に関して言えば lock xchg [mem],reg という命令があって、
これが atomic に実行されることがハードウエア側で保証されている。
atomic とは [同一 CPU 内部の他のコア] や [smp 下での別 CPU] などが
同時に命令を実行しようとしても、邪魔されないということ。

Linux の場合の spinlock の解説例とか
http://hira-consulting.com/wiki/index.php?lkc2005_11_10_slkn01

hardware は同一なわけで windows でも linux と同等のロック機構を使っているはず。


返信引用
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

ハード的にどのような仕組みになっているのかは知りませんので、
別な側面から考えて見ます。

まず第一に、CPU内のコアがいくつであろうと、単体で
無矛盾に動作しなければ実用になりません。

原則として、複数コアのCPUが無矛盾に動くためには。
 1.コア間の調整が必要です(本質的に勝手な動きはできません)。
 2.全コアが対象とする入出力は唯一でなければなりません。
ですね。
つまり排他については「できてあたりまえ」、別の言い方をすると、
無ければ実用にならないわけです。

ネットワークでつながれた複数のPCで、唯一の作業を
分担して行わせるには、どのような仕組みが必要かを考えてみると
わかりやすいかもしれませんね。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました