结构

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_ 函数访问。

函数

g_mutex_new

分配并初始化新的 GMutex

已弃用:2.32 

实例方法

g_mutex_clear

释放分配给带有 g_mutex_init() 的互斥锁的资源。

since: 2.32

g_mutex_free

销毁使用 g_mutex_new() 创建的 mutex

已弃用:2.32 

g_mutex_init

初始化 GMutex,以便可以使用它。

since: 2.32

g_mutex_lock

锁定 mutex。如果 mutex 已被另一个线程锁定,则当前线程将阻塞,直到 mutex 被另一个线程解锁。

g_mutex_trylock

尝试锁定 mutex。如果 mutex 已被另一个线程锁定,它将立即返回 FALSE。否则,它将锁定 mutex 并返回 TRUE

g_mutex_unlock

解锁 mutex。如果另一个线程在对 mutexg_mutex_lock() 调用中被阻塞,它将解除阻塞并可以锁定 mutex 本身。