1.void g_cond_wait (GCond *cond, GMutex *mutex)
{
gint status;
if G_UNLIKELY ((status = pthread_cond_wait (g_cond_get_impl (cond),g_mutex_get_impl (mutex))) != 0)
g_thread_abort (status, "pthread_cond_wait");
}
2.void g_cond_signal (GCond *cond)
{
gint status;
if G_UNLIKELY ((status = pthread_cond_signal (g_cond_get_impl (cond))) != 0)
g_thread_abort (status, "pthread_cond_signal");
}
3.void g_cond_broadcast (GCond *cond)
{
gint status;
if G_UNLIKELY ((status = pthread_cond_broadcast (g_cond_get_impl (cond))) != 0)
g_thread_abort (status, "pthread_cond_broadcast");
}
4.gboolean g_cond_wait_until (GCond *cond,GMutex *mutex, gint64 end_time)
{
if ((status = pthread_cond_timedwait_relative_np (g_cond_get_impl (cond), g_mutex_get_impl (mutex), &ts)) == 0)
return TRUE;
}
#elif defined (HAVE_PTHREAD_CONDATTR_SETCLOCK) && defined (CLOCK_MONOTONIC)
glib2之g_cond_broadcast/g_cond_signal/g_cond_wait等底层实现(十六)
最新推荐文章于 2021-09-15 08:46:13 发布
本文详细探讨了glib2库中条件变量的关键函数——g_cond_broadcast、g_cond_signal和g_cond_wait的底层实现原理。通过对这些函数的工作机制和使用场景的分析,帮助读者理解多线程同步中的条件等待机制。
摘要由CSDN通过智能技术生成