我试图从多线程程序中使用NetworkManager的libnm绑定。 libnm线程安全吗?我找不到任何有关它的信息。
答案 0 :(得分:0)
libnm是使用glib和gobject编写的。虽然他们似乎没有在他们的doc中明确提到它,但一般来说任何使用glib的东西都在the main event loop上运行并且期望只在主事件循环上调用API(即:在事件的线程上)循环运行)。
但是,Glib本身通常是线程安全的,或者提供了确保线程安全的方法。例如,要连接到libnm的信号,您可以从任何线程使用g_signal_connect;但是,您提供的信号处理程序将在运行主循环的线程上调用。此外,您可以在任何线程中使用类似g_idle_add的内容,以便安排从主事件循环中调用函数。您还可以使用GTask lib来帮助您在glib中进行线程化。有关Glib main context here的更多信息。