似乎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內?