【发布时间】:2012-04-10 18:56:02
【问题描述】:
我在 glib 文档中找不到任何关于线程安全的信息。我想这意味着我可能应该假设它不是线程安全的,但我不确定我应该锁定哪些共享资源。
有人对使用 glib 的线程安全有任何经验吗?我可以使用哪些准则来确保我的 glib 代码是线程安全的?
谢谢!
【问题讨论】:
标签: multithreading thread-safety glib
我在 glib 文档中找不到任何关于线程安全的信息。我想这意味着我可能应该假设它不是线程安全的,但我不确定我应该锁定哪些共享资源。
有人对使用 glib 的线程安全有任何经验吗?我可以使用哪些准则来确保我的 glib 代码是线程安全的?
谢谢!
【问题讨论】:
标签: multithreading thread-safety glib
实际上 glib 参考手册中充满了关于线程安全的信息:
在调用 g_thread_init() 之后,GLib 是完全线程安全的(所有 全局数据被自动锁定),但单独的数据结构 出于性能原因,实例不会自动锁定。所以, 例如,您必须协调对同一 GHashTable 的访问 多个线程。该规则的两个值得注意的例外是 GMainLoop 和 GAsyncQueue,它们是线程安全的,不需要进一步 可从多个线程访问的应用程序级锁定。
您可能想查看参考手册的threads section。
【讨论】:
全局策略很简单:除了数据操作函数外,所有的都是线程安全的。在那里阅读:http://developer.gnome.org/glib/stable/glib-programming.html
【讨论】:
从GLib reference manual可以得到如下语句:
GLib 本身在内部是完全线程安全的(所有全局数据都被自动锁定),但出于性能原因,个别数据结构实例不会自动锁定。
所以为了补充前面的答案,你不需要打电话给g_thread_init()。
【讨论】: