函数宏

GLibonce

since: 2.4

声明 [src]

#define g_once (
  once,
  func,
  arg
)

说明 [src]

对于具有给定的 GOnce 结构的进程,对此例程的首次调用将使用给定的参数调用 func。此后,使用相同的 GOnce 结构对 g_once() 的后续调用不会再次调用 func,而是返回第一次调用的存储结果。从 g_once() 返回后,once 的状态将变为 G_ONCE_STATUS_READY

例如,必须只创建一个互斥或线程级数据键。在多线程环境中,调用 g_once() 可确保初始化在多个线程上串行化。

func 中对同一 GOnce 结构递归调用 g_once() 会导致死锁。

  gpointer
  get_debug_flags (void)
  {
    static GOnce my_once = G_ONCE_INIT;

    g_once (&my_once, parse_debug_flags, NULL);

    return my_once.retval;
  }

自 2.4 起可用

语言绑定不能直接调用此函数。

参数

once

类型: -

一个 GOnce 结构。

func

类型: -

once 相关联的 GThreadFunc 函数。无论该函数及与其相关联的 GOnce 结构被传递给 g_once() 的次数如何,此函数只调用一次。

arg

类型: -

传递到 func 的数据。