Published in: C++
typedef struct GSem GSem; struct GSem { GCond *condition; GMutex *mutex; guint counter; }; GSem * g_sem_new (void) { GSem *sem; sem = g_new (GSem, 1); sem->condition = g_cond_new (); sem->mutex = g_mutex_new (); sem->counter = 0; return sem; } void g_sem_free (GSem *sem) { g_cond_free (sem->condition); g_mutex_free (sem->mutex); g_free (sem); } void g_sem_down (GSem *sem) { g_mutex_lock (sem->mutex); while (sem->counter == 0) { g_cond_wait (sem->condition, sem->mutex); } sem->counter--; g_mutex_unlock (sem->mutex); } void g_sem_up (GSem *sem) { g_mutex_lock (sem->mutex); sem->counter++; g_cond_signal (sem->condition); g_mutex_unlock (sem->mutex); }
You need to login to post a comment.
