eventfd
线程安全
属性顶部
有关本节中使用的术语的解释,请参见
属性(7)。┌──────────┬───────────────┬─────────┐ │Interface │ Attribute │ Value │ ├──────────┼───────────────┼─────────┤ │eventfd() │ Thread safety │ MT-Safe │
我想用eventfd
包裹boost::asio::posix::stream_descriptor
所以我可以在 boost :: asio :: io_service 中使用它。
根据boost stream_descriptor
man pages,stream_descriptor
线程安全
螺纹安全
不同的物体:安全。
共享对象:不安全。
因此,如果我理解正确,使用boost::asio
async_read_some
/ write_some
进行读/写是不安全的,其中多个线程来自/ {eventfd
1}}用stream_descriptor
包裹。
这是"降级",因为原生eventfd
允许它。
我的理解是否正确?
答案 0 :(得分:2)
确实
一些准确性:
eventfd
来电,而非fd 没有什么能阻止你创建绑定到同一个fd的两个实例。
只需使用release()
即可避免(双倍)关闭。
此处有类似/相关的答案:How to avoid data race with `asio::ip::tcp::iostream`?