结构

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

无可用说明。

实例方法

g_static_mutex_free

释放分配给 mutex 的所有资源。

已弃用:2.32 

g_static_mutex_get_mutex_impl
无可用说明。

g_static_mutex_init

初始化 mutex。或者,你可以使用 G_STATIC_MUTEX_INIT 初始化它。

已弃用:2.32