似乎glib提供互斥锁和条件作为线程同步原语,但是关于通用的信号量(在支持原始P和V操作的意义上),有什么办法吗?我正确理解
我想到了这样的东西:
GCond
等同于二进制信号量,其中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中有没有更简单的方法来获取pthread的sem_wait
和sem_post
的功能?