2

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

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

谢谢!

4

3 回答 3

5

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

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

您可能想查看参考手册的线程部分

于 2012-04-11T08:35:25.053 回答
0

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

于 2012-11-10T14:28:41.710 回答
0

GLib 参考手册中,您可以获得以下语句:

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

因此,为了补充前面的答案,您无需调用g_thread_init().

于 2019-10-14T07:03:08.763 回答