首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单一生产者/消费者龙卷风队列线程安全吗?

单一生产者/消费者龙卷风队列线程安全吗?
EN

Stack Overflow用户
提问于 2015-10-13 14:22:41
回答 1查看 625关注 0票数 1

龙卷风里几乎没有任何东西是安全的。这是有充分理由的。

尤其是线程安全队列将导致不必要的开销。然而,队列的线程安全可能意味着各种各样的事情,常见的使用意味着多生产者、多消费者的硬情况。

然而,一个简单得多的案例是单一生产者,单一消费者的案例。对“旋风”的操作安全吗?

代码语言:javascript
复制
# on event loop in Thread 1
yield queue.get()  

# In normal code in Thread 2
queue.put_nowait(msg)  
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-13 17:43:21

不,根据术语的任何定义,龙卷风队列都不是线程安全的。考虑将"put_nowait“调用安排在”线程2“的主线程上:

代码语言:javascript
复制
IOLoop.current().add_callback(queue.put_nowait, msg)

回调

在任何时候从任何线程调用此方法都是安全的,但信号处理程序除外。请注意,这是IOLoop中唯一能够保证线程安全的方法;所有其他与IOLoop的交互都必须从IOLoop的线程中完成。add_callback()可用于将控制从其他线程传输到IO循环的线程。

如果队列配置了最大大小,那么put_nowait可能引发异常并丢失"msg“元素。但是,如果没有最大的大小,这种技术应该适用于您。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33105190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档