似乎 glib 提供了互斥锁和条件作为线程同步原语,但是通用信号量呢(从某种意义上说它们支持原始的 P 和 V 操作?)我是否正确理解 aGCond
等同于二进制信号量,g_cond_signal
相当于P
,g_cond_wait
等价于V
? 但是,不限于最大值 1 的信号量呢?
我想到了这样的事情:
struct semaphore {
int n;
GMutex sem_lock;
GCond sem_cond;
}
操作P
现在看起来像这样:
void semaphore_P (struct semaphore *sem)
{
g_mutex_lock(sem->sem_lock);
while (sem->n == 0)
g_cond_wait(sem->sem_cond, sem->sem_lock);
--sem->n;
g_mutex_unlock(sem->sem_lock);
}
有没有更简单的方法可以从 glib中获取 pthreads 的功能sem_wait
?sem_post