请注意,我使用的是Python,但这可以应用于glib的任何其他绑定。
我有一个类通过glib.io_add_watch()
和一个名为foo()
的回调方法建立多个套接字连接。另外,我对名为glib.idle_add()
的方法进行了bar()
回调。 foo()
创建或更新元素的列表(类成员),这些元素可以是任何值,包括None。 bar()
从上面的列表中删除任何无项目 - 我们已经完成了这些,我们不再关心。实际上它清理了一切。
glib承认每个线程一次只能调用一个回调吗?
如果我要运行此代码以使foo()
位于第一个线程中并且bar()
位于第二个线程中,则会出现竞争条件。我假设一个简单的互斥体可以解决这个问题,但有更有效的方法吗?
答案 0 :(得分:4)
通过g_io_add_watch
和g_add_idle
添加的回调在主循环的线程中执行,无论它们添加了什么线程。