2017-01-25 6 views
0

2つのプロセスの同期に問題があります。私は3つのXプロセスと5つのYプロセスを持っています。また、私は2つのリソース(AとB)を持っています。相互排除およびプロセス同期。 C++

リソース'A 'は同時に最大3つのプロセスで使用でき、リソース' B 'にアクセスすると相互排除が必要です。

プロセスXとY:

void processX() 
{ 
    while (1) 
    { 
     AccessToResource(B); 

     AccessToResource(A); 
    } 
} 

void processY() 
{ 
    while (1) 
    { 
     AccessToResource(A); 

     AccessToResource(B); 
    } 
} 

私が行うことができますどのようにセマフォ、ミューテックス、イベント、最短の方法を使用していますか?今、私は

CSemaphore sem(1,5,L"semaph"); 

を持っており、sem.Lock()とsem.Unlock(でそれを使用するための

)前と資源にアクセスした後、それはかなり良いではありません。

+0

したがって、AとBの両方へのアクセスを同時にロックする必要はありませんか?各リソースへのアクセスは、他のリソースとは別に処理できますか? –

+0

プロセスXとプロセスYが同時に実行されています。私はそれを扱う方法がわかりません。そのようなもので私の最初の仕事です。 – Pawel

+0

@Pawel C++標準にはプロセスの概念はなく、標準ライブラリにはプロセス間通信APIはありません。その質問に使用するAPIを指定する必要があります。 – user2079303

答えて

2

Resource'Aは」最大3 procesesによって使用されてもよい

計数セマフォは(wikiを参照)、ここで適切であろう。

いくつかのプロセスはリソースAを所有しているたびに、そのセマフォを1つ増やします。カウントが3に達すると、すでに存在することを意味します3つのプロセスはリソース 'A'を使用しています。リソース 'A'を使用して処理が終了すると、そのカウンタ(semafore)が1だけ減少し、他のプロセスがそのリソースを使用できるようになります。除く 'B' 相互資源にアクセスすることにより

が必要である

ここでは適切な溶液はmutex(又はバイナリセマフォ)であろう。どちらもほぼ同じです。違いはmutexはというリソースのためにに重点を置いています。

+0

'std :: mutex' OPが* processes *を実際に使用していて、スレッドではない場合は役に立ちません。実装の詳細ですが、OPが実装固有の回答または一般的な回答(あなたが提供したもの)を必要としているかどうかは、実際には分かりません。 –

+0

@Someprogrammerdudeはい、申し訳ありませんが、私はちょうどC++タグで誤解されました。答えを修正しました。 –

+0

@ Yuriy Ivaskevych一般的な答えは、具体的な実装としては大丈夫です。答えは私にとっては十分だと思います:)ありがとう – Pawel

関連する問題