- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
同事和我讨论了一个假设的问题,当一个人想用 std::atomic_flag
实现自旋锁互斥锁,但也实现自旋锁不是 while(true) 而是作为
while(true)
{
cnt=0;
while (cnt<yieldAfterTries)
{
//try to get lock
cnt++;
}
std::this_thread::yield();
// if got lock do work and then break;
}
基本的想法是线程不能“长时间”阻塞其他线程,即使它具有实时优先级,因为它会在一段时间后放弃......但是当我看到std::yield 的规范我很惊讶这是一个建议,而不是强制性的。
Provides a hint to the implementation to reschedule the execution of threads, allowing other threads to run.
http://en.cppreference.com/w/cpp/thread/yield
那会不会有问题?
最佳答案
我编写的代码与您的非常相似,并测量了在高竞争条件下调用 yield
的影响。我发现以这种方式使用 yield
有利于整体系统吞吐量。
实际规范与您引用的在精神上没有什么不同,但这里是 30.3.2 [thread.thread.this] 第 2 段和第 3 段的确切规范:
void this_thread::yield() noexcept;
Effects: Offers the implementation the opportunity to reschedule.
Synchronization: None.
如果实现将 yield
实现为空操作(例如),这只会影响代码的性能而不影响正确性。即使没有 yield
,失败的自旋锁最终也会被抢占。但它也更有可能不必要地占用 CPU,从而降低整体系统性能。
关于c++ - std::this_thread::yield 只是一个提示会不会有问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14402328/
C++11 std::this_thread::yield() 和 std::this_thread::sleep_for() 有什么区别?如何决定何时使用哪一个? 最佳答案 std::this_th
我在实现过程中遇到了一个具体问题,但找不到解决方案。 我有一个分为两部分的应用程序。一部分是 Java swing GUI。第二部分是一个 C++ 应用程序,它执行所有(耗时的)计算逻辑。这两个进程(
我在编写 Microsoft 特定的 C++ 代码时被告知要编写 Sleep(1)在自旋锁定方面比 Sleep(0) 好得多,因为 Sleep(0) 将使用更多的 CPU 时间,而且,它只有在有另一个
C++ 98和Boost 1.54 我在弄清楚为什么使用boost::this_thread::sleep_for会使我的整个程序处于休眠状态时遇到了麻烦。调用Wait()函数的唯一时间和地点是在此线
我正在尝试做一件非常简单的事情(但花了几个小时没有结果):打印一行,睡一会儿,打印第二行。我希望下面的代码可以做到这一点,但是,它首先会休眠,然后同时打印两行!谁能看到我在这里缺少的东西? 这是完整的
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: std::this_thread::sleep_for() and GCC 尝试编写一个简单的计时器和一些代
我正在使用 this_thread::sleep_for() 进行测试创建一个类似于 cout 的对象, 除了在打印字符串时它会在每个字符之间有一个小的延迟。但是,它不是在每个字符之间等待 0.1 秒
我可以通过以下方式将线程 ID 打印到控制台: cout Windows -> Threads -> [ID column] 如果我在 Debug -> Windows -> Threads 中按此
我有一个包含两个线程的简单程序,一个将 packaged_task 推送到一个 deque 中,另一个执行它。在任务中有一个 this_thread::sleep_for,我希望只有“进程”线程会等待
有人可以提供C++应用程序中std::this_thread::yield()用法的真实示例吗? 最佳答案 我在实现std::lock的过程中使用了yield,可以在这里找到: http://llvm
std::this_thread::get_id 是否独立于调用它的线程的创建方式(无论是通过 std::thread 还是 OpenMP 或 pthreads 或操作系统 API)? 最佳答案 是的
这正确地拉入了一个文本文件,但它没有以正确的顺序输出它,我需要一个线程来产生,但是当我尝试实现它时,它没有工作。每次程序运行时,它都会以随机顺序显示 vows 和 cons,即使使用了 yield 函
同事和我讨论了一个假设的问题,当一个人想用 std::atomic_flag 实现自旋锁互斥锁,但也实现自旋锁不是 while(true) 而是作为 while(true) { cnt=0;
在开发基于 VoIP 的应用程序时,我们有一个通用的多线程 C++11 模块。它在 iOS、MacOS 中运行良好,但在 Android 中发现线程调度困难。 可选的设计说明(仅在感兴趣时) 我有几个
在 Debug模式下运行时,抛出中断错误时崩溃: 如何中断线程池,以及如何正确捕获中断(以及在哪里?在分派(dispatch)的作业中,还是在 CancelAll 中?)如果没有中断点,它不会崩溃,但
在使用 std::this_thread::sleep_for() 毫秒及以上时,是否需要考虑任何已知的可移植性问题? 在我正在进行的项目中,我希望使用 Microsoft 的 Sleep() 到 n
boost/thread/pthread/shared_mutex.hpp 包含这段代码: ... #include ... class shared_mutex { ... voi
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我有一个循环,我想确保它在每个循环中运行(大约)固定的时间量。 我正在使用 sleep_for 来实现此行为,但我也希望程序能够在不完全支持标准线程库的环境中编译。现在我有这样的东西: using n
请注意,这不是关于 std::condition_variable::wait_for() 的问题。我知道这可能会虚假唤醒。 我的程序的行为表明这个问题的答案是肯定的,但是 STL 文档对于 cond
我是一名优秀的程序员,十分优秀!