是否有任何方式所以我可以有多達10個線程在相同的mutex
?用互斥體重建sem_wait()?
類似於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);
}
一個互斥體被設計爲允許只有一個消費者(線程,進程,等等)到「有」了。因此,互斥量是一個信號量的特殊情況(準確地說是一個二進制信號量)。僅使用互斥鎖很難實現計數信號量。 – 2013-01-03 12:11:31
我認爲這可以通過互斥和條件變量來完成,但我有點失落..:S –
看看這是否有助於你http://stackoverflow.com/questions/3491762/incrementing-the-value-of-posix-信號量大於1 – banuj