我在glib文档中找不到有关线程安全的任何信息。我想这意味着我应该假设它不是线程安全的,但我不确定我应该锁定哪些共享资源。
有没有人使用glib有线程安全经验?我可以使用哪些指南来确保我的glib代码是线程安全的?
谢谢!
答案 0 :(得分:3)
实际上,glib参考手册中包含有关线程安全的信息:
在调用g_thread_init()之后,GLib完全是线程安全的(全部 全局数据自动锁定),但个别数据结构 由于性能原因,实例不会自动锁定。所以, 例如,您必须协调对相同GHashTable的访问 多线程。这条规则的两个值得注意的例外是 GMainLoop和GAsyncQueue,它们是线程安全的,不需要进一步的操作 可以从多个线程访问应用程序级锁定。
您可能需要查看参考手册的threads section。
答案 1 :(得分:0)
全局策略很简单:除数据操作函数外,所有都是线程安全的。请阅读:http://developer.gnome.org/glib/stable/glib-programming.html
答案 2 :(得分:0)
从GLib reference manual中可以得到以下语句:
GLib本身在内部完全是线程安全的(所有全局数据都自动锁定),但是出于性能原因,不会自动锁定单个数据结构实例。
因此,作为先前答案的补充,您无需致电g_thread_init()
。