结构
GLibMutex
描述 [src]
union GMutex {
/* No available fields */
}
GMutex
结构是一个不透明的数据结构,用于表示互斥锁(互斥)。它可用于保护数据不受共享访问的影响。
以以下函数为例
int
give_me_next_number (void)
{
static int current_number = 0;
// now do a very complicated calculation to calculate the new
// number, this might for example be a random number generator
current_number = calc_next_number (current_number);
return current_number;
}
很容易看出,这在多线程应用程序中不起作用。There current_number 必须受到共享访问的保护。GMutex
可用作解决此问题的方案
int
give_me_next_number (void)
{
static GMutex mutex;
static int current_number = 0;
int ret_val;
g_mutex_lock (&mutex);
ret_val = current_number = calc_next_number (current_number);
g_mutex_unlock (&mutex);
return ret_val;
}
请注意,GMutex
未初始化为任何特定值。将其置于静态存储中可确保将其初始化为全零,这是合适的。
如果 GMutex
置于其他上下文中(例如:嵌入在结构中),则必须使用 g_mutex_init() 显式初始化它。
GMutex
只能通过 g_mutex_ 函数访问。