condition-variable

    0热度

    1回答

    我在理解winapi条件变量如何工作时遇到问题。 在更具体的一面,我想要的是一些等待一些条件的线程。然后,我想使用WakeAllConditionVariable()调用来唤醒所有线程,以便它们可以工作。除了我只想让线程开始的事实之外,他们没有任何其他先决条件可以开始工作(就像在n生产者/ n用户场景中那样)。 这里是到目前为止的代码: #define MAX_THREADS 4 CONDIT

    9热度

    1回答

    Linux的编程接口书中有一段代码(生产者/消费者)来显示条件变量是如何工作的: static pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER; static pthread_cond_t cond = PTHREAD_COND_INITIALIZER; static int avail = 0; while (TRUE) { s

    1热度

    1回答

    多线程代码段异步访问资源(例如:文件系统)。 为了实现这一点,我将使用条件变量。假设FileSystem是一个接口,如: class FileSystem { // sends a read request to the fileSystem read(String fileName) { // ... // upon completion, execu

    3热度

    2回答

    我注意到当我对条件变量执行等待操作时,它立即返回。其结果是,执行下面的伪代码时,被在此循环中使用一个CPU的100%: int main(void) { boost::condition_variable cond; boost::mutex mut; bool data_ready = false; boost::unique_lock<boost::mutex> lock(mut)

    5热度

    2回答

    假设某个条件变量“cond”与一个互斥变量“mutex”关联。如果一个线程在调用pthread_cond_wait(&cond,&mutex)之后正在睡眠cond,并且锁定的另一个线程完成锁定,那么在调用pthread_mutex_unlock(&mutex)之前还是之后,该线程调用pthread_cond_signal(&cond)是否有关系?如果它调用pthread_cond_signal(&

    2热度

    1回答

    下面的代码重新错误: #include <iostream> #include "boost/thread.hpp" #include "boost/date_time/posix_time/ptime.hpp" int main() { boost::condition_variable_any cv; boost::timed_mutex m; try

    6热度

    2回答

    我们可以使用新的条件变量原语或Windows事件来同步WinNT v6.x或更高版本中的线程。考虑以下两种方法,我们希望工作人员在main中设置“go”时同时运行,否则应全部阻止。 /*language C code*/ /*Windows Condition Variable*/ int go=0; CONDITION_VARIABLE cv; SRWLOCK lock; void w

    9热度

    4回答

    如果在持续时间为boost::condition_variable上使用timed_wait,则即使用户(或ntp)更改系统时间,等待条件是否会超时? 例如, boost::posix_time::time_duration wait_duration(0, 0, 1, 0); // 1 sec // ** System time jumps back 15 minutes here. **

    5热度

    4回答

    后来我想着如何以各自的方式实现各种同步原语。例如,在pthreads中,你可以获得互斥锁和条件变量,并从这些变量中构建信号量。 在Windows API(或至少是旧版本的Windows API)中有互斥锁和信号量,但没有条件变量。我认为应该可以用互斥和信号建立条件变量,但是对于我来说,我只是想不出一个办法。 有没有人知道这样做的好构造?

    1热度

    2回答

    我想使用Boost库同步两个线程(在相同的C++映射上工作)。我必须告诉我,我不是C++的专家,我觉得boost文档很难理解。 我想实现什么,是这样的: #Thread 1 get access to the map put in something release access #Thread 2 wait until map is empty when it's not empt