0

(wikiへの問題リンク: http://en.wikipedia.org/wiki/Room_synchronization )

配列で表されるタイプ NODE のリソースが N 個あるとします。

 NODE  nodearray[N];

動作する (読み取り/書き込み) スレッドが M 個あるとします。最初のスレッドが到着すると、N リソースのいずれかを自由に選択できますが、最初のスレッドがリソース番号 x (x は 0 から n-1) を保持している限り、2 番目のスレッドは同じ x を使用する必要があります。

2 つの関数を実装するとします。

int get();// gets the resource number for the thread and 
void ret();// returns the resource from the thread

どのように実装できるかについてのアイデア/ヒントはありますか?

4

3 に答える 3

0

私はこの解決策を持っていますが、誰かがそれを批判できれば素晴らしいと思います.

int counter = 0;
int current = -1;
NODE  nodearray[N];
mutex m;

int get() {
  lock(m);
  if(!counter) {
    current = rand()%N;
  }
  ++counter;
  unlock(m);
  return current;
}

void ret() {
  lock(m);
  --counter;
  if(!counter) {
    current = -1;
  }
  unlock(m);
}
于 2013-04-07T05:38:38.920 に答える