结构
GLibStaticMutex
说明 [src]
struct GStaticMutex {
GMutex* mutex;
}
GStaticMutex
的工作方式类似于 GMutex
。
在 GLib 2.32 之前,GStaticMutex 具有一个显著的优势,即它不需要在运行时创建,而可以在编译时定义。自 2.32 以来,GMutex
也可以静态分配,GStaticMutex 已经过时。
下面是使用 GStaticMutex 的 give_me_next_number()
示例版本
int
give_me_next_number (void)
{
static int current_number = 0;
int ret_val;
static GStaticMutex mutex = G_STATIC_MUTEX_INIT;
g_static_mutex_lock (&mutex);
ret_val = current_number = calc_next_number (current_number);
g_static_mutex_unlock (&mutex);
return ret_val;
}
有时你希望动态创建互斥锁。如果你不想需要先调用 g_thread_init(),因为你的代码也应该在非线程程序中可用,你无法使用 g_mutex_new()
和 GMutex
,因为这需要先调用 g_thread_init()。在这些情况下,你也可以使用 GStaticMutex
。在使用它之前必须使用 g_static_mutex_init()
初始化它,并在不再需要时使用 g_static_mutex_free()
释放它,以释放所有已分配的资源。
即使 GStaticMutex
不是不透明的,也应该仅与以下函数一起使用它,因为它在不同的平台上定义不同。
除了 g_static_mutex_get_mutex()
之外,所有的 g_static_mutex_* 函数都可以使用,即使尚未调用 g_thread_init()
。然后它们除了 g_static_mutex_trylock()
之外什么也不做,而 g_static_mutex_trylock()
只返回 TRUE
。
所有的 g_static_mutex_* 函数实际上都是宏。除了获取它们的地址之外,你还可以将它们用作函数。
结构成员
mutex
无可用说明。