1

同じスレッドを最大10個まで持つことができる方法はありますmutexか?

sem_wait()値のようなもの10

編集:

これを見つけました:

これは、ミューテックスと条件変数を使用したセマフォの実装です。

typedef struct {
  int value, wakeups;
  Mutex *mutex;
  Cond *cond;
} Semaphore;

// SEMAPHORE

Semaphore *make_semaphore (int value)
{
  Semaphore *semaphore = check_malloc (sizeof(Semaphore));
  semaphore->value = value;
  semaphore->wakeups = 0;
  semaphore->mutex = make_mutex ();
  semaphore->cond = make_cond ();
  return semaphore;
}

void sem_wait (Semaphore *semaphore)
{
  mutex_lock (semaphore->mutex);
  semaphore->value--;

  if (semaphore->value < 0) {
    do {
      cond_wait (semaphore->cond, semaphore->mutex);
    } while (semaphore->wakeups < 1);
    semaphore->wakeups--;
  }
  mutex_unlock (semaphore->mutex);
}

void sem_signal (Semaphore *semaphore)
{
  mutex_lock (semaphore->mutex);
  semaphore->value++;

  if (semaphore->value <= 0) {
    semaphore->wakeups++;
    cond_signal (semaphore->cond);
  }
  mutex_unlock (semaphore->mutex);
}
4

2 に答える 2

2

それが役立つかどうかを確認してください

Book Beginning Linuxプログラミングから、より広い範囲の値をとるカウントセマフォ。通常、セマフォはコードの一部を保護するために使用されるため、一度に1つの実行スレッドのみがコードを実行できます。このジョブには、バイナリセマフォが必要です。場合によっては、限られた数のスレッドが特定のコードを実行できるようにしたいことがあります。このためには、カウントセマフォを使用します

于 2013-01-03T12:11:27.833 に答える
0

いいえ、mutex は単純なロックであり、ロックとロック解除の 2 つの状態があります。ミューテックスが作成されると、ロックが解除されます。ミューテックスは相互排他ロックです。ロックを保持できるスレッドは 1 つだけです。

mutexとを使用してセクションに 10 個のスレッドが入るように実装できますがifglobal variable. (カウントセマフォの実装方法)

ここを読む:カウンティング セマフォの
実装 利用可能な実装: C コード, 独自のセマフォを作成する

于 2013-01-03T12:17:11.357 に答える