似乎glib提供了互斥体和条件作为线程同步原语,但通用semaphores(从它支持原始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);
}
有没有一种简单的方法来获得其中的并行线程sem_wait
功能和sem_post
从glib内?