glib はスレッド同期プリミティブとしてミューテックスと条件を提供しているようですが、一般的なセマフォについてはどうですか(元の P および V 操作をサポートするという意味で)。、および?と同等です。しかし、最大値が 1 に制限されていないセマフォはどうでしょうか?GCond
g_cond_signal
P
g_cond_wait
V
私は次のようなことを考えました:
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);
}
pthreads の機能を glib 内から取得する簡単な方法はありsem_wait
ますsem_post
か?