glib 回调和线程安全

Sar*_*ica 3 gtk pygtk glib thread-safety

请注意,我使用的是 Python,但这可能适用于 glib 中的任何其他绑定。

glib.io_add_watch()我有一个类,通过一个名为 的回调方法设置多个套接字连接foo()。此外,我还有一个glib.idle_add()名为 的方法的回调bar()foo()创建或更新元素列表(类成员),元素可以是任何值,包括 None。 bar()从上面的列表中删除任何 None 项目——我们已经完成了这些,我们不再关心。实际上,它清理了一切。

glib 是否允许每个线程在任意时间仅调用一个回调?

如果我要foo()在线程一和bar()线程二中运行此代码,则会出现竞争条件。我认为一个简单的互斥体可以解决这个问题,但是有没有更有效的方法来做到这一点?

nem*_*equ 5

g_io_add_watch通过和添加的回调g_add_idle在主循环的线程中执行,无论它们是从哪个线程添加的。