Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Внимание: Повторный вызов g_mutex_lock() внутри уже заблокированного мьютекса не заблокирует программу и будет просто проигнорирован, что защищает от повторных блокировок.
void g_mutex_lock(GMutex *mutex);
Locks mutex. If mutex is already locked by another thread, the current thread will block until mutex is unlocked by the other thread.
Note
GMutex is neither guaranteed to be recursive nor to be non-recursive. As such, calling g_mutex_lock() on a GMutex that has already been locked by the same thread results in undefined behaviour (including but not limited to deadlocks).
Внимание: Ожидание сигнала должно быть внутри заблокированного мьютекса, и посылать сигнал тоже рекомендуется внутри заблокированного мьютекса, хотя это и не обязательно.
Во время ожидания мьютекс временно разблокируется для того чтобы можно было зайти внутрь этого же мьютекса из другого потока и послать сигнал.
GCond*, несправедливо обозванная вами «сигналом», это и есть condition variable.Так как нет перевода для средства синхронизации, вот и придумал более менее близкое по действию.
Кросс-платформенные многопоточные приложения