我在 glib 文档中找不到任何有关线程安全的信息。 我想这意味着我应该假设它不是线程安全的,但我不确定我应该锁定哪些共享资源。
有人有使用 glib 线程安全的经验吗? 我可以使用什么准则来确保我的 glib 代码是线程安全的?
谢谢!
其实glib参考手册里充满了关于线程安全的信息:
调用g_thread_init()后,GLib是完全线程安全的(所有 全局数据自动锁定),但个别数据结构 出于性能原因,实例不会自动锁定。所以, 例如,您必须协调对同一 GHashTable 的访问 多线程。该规则的两个值得注意的例外是 GMainLoop 和 GAsyncQueue,它们是线程安全的,不需要进一步 可从多个线程访问应用程序级锁定。
您可能想查看参考手册的线程部分。
从GLib参考手册可以得到以下说法:
GLib 本身内部是完全线程安全的(所有全局数据都会自动锁定),但出于性能原因,单个数据结构实例不会自动锁定。
因此,为了补充之前的答案,您不需要致电
g_thread_init()
。
全局策略很简单:除了数据操作函数之外,所有策略都是线程安全的。在那里读: GLib – 2.0:编写 GLib 应用程序