是否有任何方式,所以我可以在同一个mutex
中拥有最多10个主题?
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);
}
答案 0 :(得分:2)
请参阅“如果有帮助”
从Book 开始Linux编程计数信号量 采用更广泛的价值观。通常,信号量习惯了 保护一段代码,以便只能运行一个执行线程 它在任何时候。对于这项工作,需要二进制信号量。 有时,您希望允许有限数量的线程 执行一段代码;为此你会使用计数 旗语强>
答案 1 :(得分:0)
否,互斥锁是一个简单的锁,有两种状态:锁定和解锁。创建时,会解锁互斥锁。 互斥锁是互斥锁。只有一个线程可以锁定。
虽然您可以实现允许十个线程使用mutex
和if
以及global variable
在一个部分中输入。 (实现计数信号量的方式)
请在此处阅读:Implementing a Counting Semaphore
一个可用的实施:C code,Make your own semaphore