作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
请注意,我使用的是 Python,但这可能适用于 glib 的任何其他绑定(bind)。
我有一个类通过 glib.io_add_watch()
和一个名为 foo()
的回调方法设置多个套接字连接。此外,我有一个 glib.idle_add()
回调到名为 bar()
的方法。 foo()
创建或更新元素列表(类成员),这些元素可以是任何值,包括 None。 bar()
从上面的列表中删除任何 None 项目——我们已经完成了这些,我们不再关心。实际上,它清理了一切。
glib 是否允许每个线程在任何时候只调用一个回调?
如果我要运行这段代码,使 foo()
在线程一中,而 bar()
在线程二中,就会出现竞争条件。我假设一个简单的互斥锁可以解决这个问题,但有没有更有效的方法来做到这一点?
最佳答案
通过 g_io_add_watch
和 g_add_idle
添加的回调在主循环的线程中执行,无论它们是从哪个线程添加的。
关于thread-safety - glib 回调和线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11736421/
我是一名优秀的程序员,十分优秀!