C#, C♯, C#相談室 Part71
■ このスレッドは過去ログ倉庫に格納されています
0238デフォルトの名無しさん
2012/04/18(水) 00:11:32.13アンマネージドメモリをプロセス間の共通メモリとして使ってて、排他処理を自前で実装しようとしてます。
プロセス1、プロセス2があったとして、
処理Aを実行しているときはロックして他のプロセスを排他制御したいとする。
1.まず、プロセス1が、メモリA(1byte)を見て0が入ってることを確認する。
2.プロセス1はメモリAに1という数字を入れる
3.プロセス1は処理Aを実行する
4.その間、プロセス2が処理Aを実行しようとするが、その前に、メモリAを見る。
5.メモリAには1という数字(フラグ)が入っているので、処理Aを実行してはいけないと判断し、メモリAが0になるまで待つ。
6.プロセス1は処理Aを終えた後、メモリAに0を入れる。
7.プロセス2がメモリAに0が入ってるのを確認し、処理Aを実行する
これがミューテックス?違う?
でもこれだと、プロセス1がメモリAを見て、フラグが入っていないことを確認するというステップ(隙)があるから、
その後、メモリAを1にするまでに、プロセス2にメモリAを参照されちゃうと、まだメモリAには0が入っているから、
プロセス2も処理Aを実行しちゃうよね?
どうすればいいんだろう・・・。
■ このスレッドは過去ログ倉庫に格納されています