jjzjj

pthread_cond_wait

全部标签

c++ - 获取 std::future<T>::wait_for 的运行时间

有没有一种简单的方法来获取std::future::wait_for期间耗时?如果没有超时发生?我想实现这样的目标:std::futurefutureRet=std::async(std::launch::async,&Someone::doSomething,this);futureRet.wait_for(std::chrono::seconds(30));coutseconds.";是否有一种“getElapsedTime()”函数,还是我必须自己计算耗时? 最佳答案 有一个简单的方法使用:autostart=std::chr

c++ - 在生产者-消费者代码中使用 wait() boost 条件死锁

我已经使用Boost线程和条件实现了一个基本的线程生产者-消费者(线程1=生产者,线程2=消费者)。我经常无限期地陷入wait()中。我真的看不出这里有什么问题。下面是一些伪代码://mainclassclassMain{public:voidAddToQueue(...someData...){boost::mutex::scoped_locklock(m_mutex);m_queue.push_back(newQueueItem(...someData...));m_cond.notify_one();}voidRemoveQueuedItem(...someCond...){//

c++ - pthread-win32 扩展 sem_post_multiple

我目前正在围绕pthreads构建一个薄的C++包装器供内部使用。Windows和QNX都是目标,幸运的是pthreads-win32端口似乎工作得很好,而QNX符合我们实际目的的POSIX。现在,在实现信号量时,我点击了函数sem_post_multiple(sem_t*,int)这显然只在pthreads-win32上可用,但在QNX中缺失。顾名思义,该函数应该通过作为第二个参数给出的计数来增加信号量。据我所知,该函数既不是POSIX1b也不是POSIX1c的一部分。虽然目前对上述功能没有要求,但我仍然想知道为什么pthreads-win32提供该功能以及它是否有用。我可以尝试使用

c++ - 关于pthread调度器和优先级的问题

我在Debian7上使用gccc++4.7。我想为我的线程设置一些优先级。看起来我必须通过pthread来完成。我对pthread中的调度程序策略和优先级感到困惑。问题1:我在我的C++代码中使用sched_setscheduler将线程调度程序设置为SCHED_RR。这个进程中的所有线程都会使用这个实时调度程序吗?或者我可以在一个进程中为不同的线程设置不同的调度程序策略?问题2:线程优先级是只在进程内部生效还是跨进程生效?例如。我有两个进程都使用SCHED_RR。一个有一个优先级为99的线程,另一个有一个优先级为98的线程。前一个线程的优先级是否高于后者?如果线程使用不同的调度程序怎

c++ - 关于 pthread_cond_wait?

我有以下代码:typedefstruct{...volatileinti_lines_completed;pthread_mutex_tmutex;q265_pthread_cond_tcv;...}q265_picture_t;voidq265_frame_cond_broadcast(q265_picture_t*frame,inti_lines_completed){pthread_mutex_lock(&frame->mutex);frame->i_lines_completed=i_lines_completed;pthread_cond_broadcast(&frame->

c++ - 具有取消处理的 async_wait 处理程序类成员

这很好用:classcStartSequence{voidTick(){//dosomething}voidWait(){myTimer->expires_from_now(boost::posix_time::seconds(mySecs));myTimer->async_wait(boost::bind(&cStartSequence::Tick,this));}...};我希望能够取消计时器并让处理程序做一些不同的事情voidTick(boost::system::error_code&ec){if(!ec)//dosomethingelse//dosomethingdiffer

c++ - __POSIX_VISIBLE 正在破坏我在 cygwin 上的 pthreading

我正在编译一个在cygwin上使用pthreads和gcc(完全是g++)的项目。鉴于我一直是如何在linux上开发它的,我从来没有遇到过任何问题。但现在,我无法编译使用某些pthread函数的代码,编译器提示这些函数未声明。我意识到我的工具链g++(GCC)5.4.0附带的pthread.h已使用保护部分#if__POSIX_VISIBLE>=200112这些阻止函数在cygwin/windows上可用。我尝试搜索“__POSIX_VISIBLE”,但没有找到真正有用的信息。这实际上是做什么的,为什么?我认为这只是pthread的某些部分不能在Windows上工作,或者在cygwin

c++ - 将 pthreads 与 CUDA 结合使用 - 设计问题

我正在编写一些需要一些磁盘I/O的代码,并调用我编写的库来执行一些计算和GPU工作,然后调用更多磁盘I/O将结果写回文件。我想将其创建为多线程代码,因为文件非常大。我希望能够读取文件的一部分,将其发送到GPU库,然后将一部分写回文件。涉及的磁盘I/O非常大(如10GB),并且在GPU上的计算速度相当快。我的问题更像是一个设计问题。我应该使用单独的线程来预加载进入GPU库的数据,并且只让主线程实际执行对GPU库的调用,然后将结果数据发送到其他线程以写回磁盘,或者我是否应该继续让所有单独的线程各自完成自己的工作-获取一大块数据,在GPU上执行,然后写入磁盘,然后获取下一block数据?我正

c++ - pthread广播然后等待?

我正在尝试设置多个线程处于等待状态,直到它们收到pthread_cond_broadcast()。完成一项工作后,我希望线程回到它们的等待状态。我还希望调用pthread_cond_broadcast()的进程在继续之前等待所有线程返回到它们的等待状态。在这种情况下,调用广播的是main()函数。我正在尝试让main(0在调用广播后执行pthread_cond_wait()。void*Work::job(void*id){intidx=(long)id;while(1){pthread_mutex_lock(&job_lock);while(!jobs_complete){//wait

c++ - 将测试从 GoogleTest 升级到 GoogleMock (Ubuntu 14) 时出现与 pthread 相关的错误

尝试添加gmock时到已经在使用gtest的现有项目,我发现了一系列与pthread有关的低级错误.我的猜测是这与GoogleMock和GoogleTest的构建方式有关(请参阅下面的详细信息),但不幸的是,关于在Ubuntu14中使用这些库的最佳方式的信息不多。将代码缩减为最小的代表性示例后,会发生什么:我将GoogleTestheader替换为GoogleMockheader以及“主要”函数://Declarationsatfoo.hclassFoo{public:intsum(inta,intb);//itreturnsa+b(definedinfoo.cpp)};//Testc