【问题标题】:Is glib thread safe?glib 线程安全吗?
【发布时间】:2012-04-10 18:56:02
【问题描述】:

我在 glib 文档中找不到任何关于线程安全的信息。我想这意味着我可能应该假设它不是线程安全的,但我不确定我应该锁定哪些共享资源。

有人对使用 glib 的线程安全有任何经验吗?我可以使用哪些准则来确保我的 glib 代码是线程安全的?

谢谢!

【问题讨论】:

    标签: multithreading thread-safety glib


    【解决方案1】:

    实际上 glib 参考手册中充满了关于线程安全的信息:

    在调用 g_thread_init() 之后,GLib 是完全线程安全的(所有 全局数据被自动锁定),但单独的数据结构 出于性能原因,实例不会自动锁定。所以, 例如,您必须协调对同一 GHashTable 的访问 多个线程。该规则的两个值得注意的例外是 GMainLoop 和 GAsyncQueue,它们是线程安全的,不需要进一步 可从多个线程访问的应用程序级锁定。

    您可能想查看参考手册的threads section

    【讨论】:

      【解决方案2】:

      全局策略很简单:除了数据操作函数外,所有的都是线程安全的。在那里阅读:http://developer.gnome.org/glib/stable/glib-programming.html

      【讨论】:

        【解决方案3】:

        GLib reference manual可以得到如下语句:

        GLib 本身在内部是完全线程安全的(所有全局数据都被自动锁定),但出于性能原因,个别数据结构实例不会自动锁定。

        所以为了补充前面的答案,你不需要打电话给g_thread_init()

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-04-15
          • 2011-07-04
          • 2014-04-26
          • 2012-11-30
          • 2010-12-30
          • 2013-03-12
          相关资源
          最近更新 更多