condition-variable相关内容

在 C++11 中等待多个条件变量的最佳方法是什么?

首先介绍一下上下文:我正在学习 C++11 中的线程,为此,我正在尝试构建一个小的 actor 类,本质上是这样的(我把异常处理和传播的东西排除在外): 类演员{私有:std::atomic停止;私有:std::condition_variable 中断;私有的:std::thread actor_thread;私人:message_queue incoming_msgs;公开:演员 ..

在生产者-消费者情况下使用条件变量

我正在尝试了解条件变量以及如何在生产者-消费者的情况下使用它.我有一个队列,其中一个线程将数字推入队列,而另一个线程从队列中弹出数字.当生产线程放置一些数据时,我想使用条件变量向消费线程发出信号.问题是有时(或大多数时候)它只将最多两个项目推入队列然后挂起.我已经在 generate() 函数中指出它在调试模式下运行时停止的位置.谁能帮我指出为什么会这样? 我有以下全局变量: boost: ..
发布时间:2021-12-24 15:15:12 C/C++开发

C++11 线程安全队列

我正在处理的一个项目使用多个线程来处理一组文件.每个线程都可以将文件添加到要处理的文件列表中,所以我把(我认为是)一个线程安全队列放在一起.相关部分如下: //qMutex 是一个 std::mutex 用于保护队列//populatedNotifier 是一个 std::condition_variable 旨在//通知等待线程队列中的新项目void FileQueue::enqueue(st ..
发布时间:2021-12-06 11:42:30 C/C++开发

为什么 Python threading.Condition() notify() 需要锁?

我的问题特别提到了为什么它是这样设计的,因为不必要的性能影响. 当线程 T1 有这个代码时: cv.acquire()简历等待()简历.release() 和线程 T2 有这个代码: cv.acquire()cv.notify() # 要求持有锁简历.release() 发生的事情是 T1 等待并释放锁,然后 T2 获取它,通知 cv 唤醒 T1.现在,从 wait() 返回后,T2 ..

使用系统时间更改的wait_until的condition_variable变通办法

我有一个使用 std :: condition_variable wait_until 的计时器类(我也尝试过 wait_for ).我正在使用 std :: chrono :: steady_clock时间等到将来的特定时间. 这本来是单调的,但是一直存在一个长期存在的问题,即它实际上使用系统时钟,并且在更改系统时间时无法正常工作. 它已在libc中按以下建议进行了修复: https ..
发布时间:2021-05-09 20:58:57 服务器开发

条件变量的谓词

我是多线程的新手.使用条件变量在C ++ 11中编写多线程代码时,我使用以下结构 while(谓词){cond_var.wait(& lock);} 但是,我一直在阅读Deitel关于操作系统的第三版(第6章),其中使用了以下结构 if(predicate){cond_var.wait(& lock);} 那么,有什么区别?为什么书不使用一会儿?伪造不是问题吗? 解决方案 ..
发布时间:2021-04-19 19:42:21 C/C++开发

std :: atomic和std :: condition_variable等待,notify_ *方法之间的区别

我正在浏览“原子操作库",并遇到了原子"wait"和"notify_ "方法的c ++ 20新功能.我很好奇std :: condition_variable的"wait"和"notify _ "方法之间的区别. 解决方案 std:atomic wait , notify_all 和 notify_one 方法类似于条件变量的方法.它们允许使用更高效,更轻便的原子变量来实现以前需要条件变量 ..
发布时间:2021-04-19 19:36:04 C/C++开发

如果我在进行timed_wait持续时间时系统时间发生了变化,该怎么办?

在持续时间为 boost :: condition_variable 的持续时间上使用 timed_wait 时,即使用户(或ntp)更改了系统,等待条件也会在持续时间后超时时间? 例如, boost :: posix_time :: time_duration wait_duration(0,0,1,0);//1秒//**系统时间在此跳回15分钟.**if(!signal.timed_ ..
发布时间:2021-04-15 20:47:07 C/C++开发

std :: condition_variable仅在调试时有效吗?

我用C ++ 14编写了一个项目,该项目是使用Intel的icpc在Fedora 26(gcc 7依赖项)上编译的。一切都很好,并且运转良好,直到我将项目移至Centos 7并开始经历非常神秘的行为。 在Centos上(scl启用devtoolset-7 bash),源代码可以正确编译和链接,但是该项目仅在使用GDB调试时有效。如果不进行调试,则条件变量的唤醒睡眠线程的通知将不起作用。 ..
发布时间:2020-09-30 19:44:15 C/C++开发

std :: condition_variable虚假阻塞

如您所知,应该循环调用条件变量,以避免虚假唤醒。像这样: 而(非条件) condvar.wait(); 如果另一个线程想要唤醒等待的线程,则必须将条件标记设置为true。例如: condition = true; condvar.notify_one(); 我想知道,这种情况是否有可能阻塞条件变量: 1)等待线程检查条件标志,并 ..
发布时间:2020-09-27 21:18:45 C/C++开发

如何保证确切的线程睡眠间隔?

通常,如果我想模拟一些工作或等待确切的时间间隔,请使用 condition_variable :: wait_for 或最差的 thread :: this_thread: :sleep_for 。但是 condition_variable 文档指出 wait_for 或 wait_until 方法的阻塞时间可能比请求的时间更长。 此功能可能由于调度或资源争用延迟而比timeout_dura ..
发布时间:2020-09-27 04:59:14 C/C++开发

等待std :: condition_variable时如何处理系统时钟更改?

我正在尝试在C ++ 11中实现一些跨平台代码。此代码的一部分使用 std :: condition_variable 实现了信号量对象。当我需要对信号量进行定时等待时,可以使用 wait_until 或wait_for。 我遇到的问题是,基于POSIX的系统上condition_variable的标准实现似乎依赖于使用系统时钟,而不是单调时钟(另请参见:针对POSIX规范的问题) 如 ..
发布时间:2020-09-27 02:47:25 C/C++开发

为什么我需要获得一个锁才能修改共享的“原子”密码?通知condition_variable之前的变量

编码为 cppreference.com : 打算修改变量的线程必须 获取标准: :mutex(通常通过std :: lock_guard) 在持有锁的同时执行修改 在std :: condition_variable上执行notify_one或notify_all (不必为通知而持有该锁) 即使共享变量是原子变量,也必须在互斥锁下对其进行修改。为了正确地将修改发布到等待线程 ..
发布时间:2020-09-27 00:01:53 C/C++开发