- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
所以我正在使用 boost::lockfree::spec_queue
通过两个运行我应用程序中两个对象的仿函数的 boost_threads 进行通信。
除了 spec_queue::pop()
方法是非阻塞的之外,一切都很好。即使队列中没有任何内容,它也会返回 True 或 False。但是我的队列似乎总是返回 True(问题 #1)。我认为这是因为我预先分配了队列。
typedef boost::lockfree::spsc_queue<q_pl, boost::lockfree::capacity<100000> > spsc_queue;
这意味着要有效地使用队列,我必须忙于等待使用 100% cpu 不断弹出队列。我宁愿不睡任意长的时间。我在 java 中使用了其他队列,这些队列会阻塞直到对象可用。这可以用 std::或 boost::数据结构来完成吗?
最佳答案
根据定义,无锁队列没有阻塞操作。
您将如何同步数据结构?没有内部锁,原因很明显,因为这意味着所有客户端都需要同步它,使它成为你的祖父锁定并发队列。
所以确实,你必须自己设计一个等待函数。你如何做到这一点取决于你的用例,这可能是图书馆不提供的原因(免责声明:我没有检查过,我也没有声称知道完整的文档)。
那么你能做什么:
正如您已经描述的那样,您可以在一个紧密的循环中旋转。显然,如果您知道您的等待条件(队列非空)总是很快就会得到满足,您就会这样做。
或者,以特定频率轮询队列(同时进行微 sleep )。安排一个好的频率是一门艺术:对于某些应用程序,100 毫秒是最佳的,对于其他应用程序,潜在的 100 毫秒等待会破坏吞吐量。因此,改变并衡量您的性能指标(如果您的应用程序要部署在数据中心的多个内核上,请不要忘记功耗:))。
最后,您可以采用混合解决方案,旋转固定次数的迭代,如果没有任何结果,则求助于(增加)间隔轮询。这将很好地支持突发高负载的服务器应用程序。
关于c++ - boost::lockfree::spsc_queue 忙等待策略。有阻塞流行音乐吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22486552/
根据https://developers.google.com/google-apps/calendar/v3/reference/freebusy/query处的文档要执行空闲/忙碌查询,您必须在正
我在启动 Apache 后使用 XAMPP 1.7.7 我收到此警报: Busy... Apache started [Port 80] 我已经打开了 httpd.conf 文件,并将端口号更改为 8
我有端口问题。 每当我启动 Apache 时,它都会给我这个错误: Busy - Apache Started [port 80] 当我启动 Mysql 时出现以下错误: Busy - ERROR
当我运行我的代码时,我总是得到后台工作人员很忙。有帮助吗? struct FtpSetting { public string Server { get; set
在我们的 Android 和 iOS MVVMCross 应用程序中,我们偶尔会遇到 SQLiteException: busy 异常。 给定下面的代码,我们有几个存储库,每个存储库都构造一个下面的实
每次运行解决方案(20 projs)时,我都会收到此错误。我尝试禁用 UI 选项、resharper、删除未使用的扩展等,但仍然无法通过此错误。 我使用的是 VS 2015 Update 2 Ente
我正在使用这个插件 https://github.com/mozilla/rust-android-gradle ,这需要我添加 tasks.whenTaskAdded { task -> i
我是一名优秀的程序员,十分优秀!