草庐IT

pthreads_cond_wait

全部标签

c++ - C、C++、C++0x、pthread 和 boost 中的线程

一个关于C/C++中线程的问题...C++0x语法#includevoiddummy(){}intmain(int,char*[]){std::threadx(dummy);std::thready(dummy);...return0;}有多少线程?两个(x和y)还是三个(x、y和主要)?我可以在main中调用this_thread::yield()吗?在main中调用this_thread::get_id()会得到什么?线程语法#includevoiddummy(){}intmain(int,char*[]){pthread_tx,y;pthread_create(&x,NULL,&

c++ - zmq-cpp : recv() waits for data despite ZMQ_DONTWAIT being set

我正在尝试使用ZMQ_DONTWAIT标志通过ZeroMQ实现非阻塞接收方法,但是recv()的行为就像在没有标志的情况下被调用:autostart=std::chrono::steady_clock::now();autohave_data=sock_->recv(&reply,ZMQ_DONTWAIT);autoduration=std::chrono::duration_cast(std::chrono::steady_clock::now()-start).count();std::coutsock_是一个zmq::socket_t实例化为REQ套接字。在这种情况下,have_

c++ - 同时等待条件 (pthread_cond_wait) 和套接字更改 (select)

我正在用c/c++编写一个POSIX兼容的多线程服务器,它必须能够异步接受、读取和写入大量连接。服务器有几个工作线程,它们执行任务并偶尔(并且不可预测地)排队将数据写入套接字。客户端偶尔也会(并且不可预测地)将数据写入套接字,因此服务器也必须异步读取。一种明显的方法是为每个连接提供一个线程,该线程从其套接字读取和写入;不过,这很丑陋,因为每个连接都可能持续很长时间,因此服务器可能不得不持有成百上千个线程来跟踪连接。更好的方法是让一个线程使用select()/pselect()函数处理所有通信。即,单个线程等待任何套接字可读,然后生成一个作业来处理输入,只要输入可用,该作业将由其他线程池

c++ - pthreads:快速重新锁定引起的线程饥饿

我有两个线程,一个在紧密循环中工作,另一个偶尔需要与第一个执行同步://thread1while(1){lock(work);//performworkunlock(work);}//thread2while(1){//unrelatedworkthattakesawhilelock(work);//synchronizingstepunlock(work);}我的意图是线程2可以通过获取锁有效地暂停线程1并执行必要的同步。线程1也可以通过解锁提供暂停,如果线程2没有等待锁定,则重新锁定并返回工作。我遇到的问题是互斥锁不公平,所以线程1很快重新锁定了互斥锁并使线程2饿死。我尝试使用pt

android - Firebase ML 套件给出 FirebaseMLException : Waiting for the text recognition model to be downloaded. 请稍候

我使用firebaseml工具包进行文本识别,但在模拟器和真实设备上给出了这个异常(exception)。W/System.err:com.google.firebase.ml.common.FirebaseMLException:Waitingforthetextrecognitionmodeltobedownloaded.Pleasewait.atcom.google.android.gms.internal.firebase_ml.zzjz.zzc(UnknownSource)atcom.google.android.gms.internal.firebase_ml.zzjz.z

android - Firebase ML 套件给出 FirebaseMLException : Waiting for the text recognition model to be downloaded. 请稍候

我使用firebaseml工具包进行文本识别,但在模拟器和真实设备上给出了这个异常(exception)。W/System.err:com.google.firebase.ml.common.FirebaseMLException:Waitingforthetextrecognitionmodeltobedownloaded.Pleasewait.atcom.google.android.gms.internal.firebase_ml.zzjz.zzc(UnknownSource)atcom.google.android.gms.internal.firebase_ml.zzjz.z

c++ - pthread_mutex_lock/unlock 的性能

我注意到,当我有一个可以大量锁定和解锁线程的算法时,我的性能会受到相当大的影响。有什么办法可以帮助减少开销吗?使用信号量会提高/降低效率吗?谢谢typedefstruct_treenode{struct_treenode*leftNode;struct_treenode*rightNode;int32_tdata;pthread_mutex_tmutex;}TreeNode;pthread_mutex_t_initMutex=PTHREAD_MUTEX_INITIALIZER;int32_tinsertNode(TreeNode**_trunk,int32_tdata){TreeNod

c++ - Windows 上的 std::conditional_variable::wait_for、std::thread::sleep_for 受调整时钟的影响

嗯。我有Win10x64和这个非常简单的代码:intmain(){std::conditional_variablecv;std::mutexm;std::unique_locklock(m);while(1){cv.wait_for(lock,1000ms,[](){returnfalse;});std::cout是的。代码就像我期望的那样工作;表明'!'每一秒。但是,如果我更改本地时间(例如减去1小时/分钟),它会永远有效。如果我用WinAPISleep(1000)替换cv.wait_for(...)它工作正常。WinAPISleepConditionVariableCS也能正常工

c++ - 未定义对 `pthread_key_create' 的引用(链接器错误)

我已经从这里下载了gtest1.7.0源代码:https://code.google.com/p/googletest/downloads/list并在ubuntu13.10上构建gtest.a文件(lib文件):Linuxubuntu3.11.0-15-generic#23-UbuntuSMPMonDec918:17:04UTC2013x86_64x86_64x86_64GNU/Linux生成的库称为:libgtest.a。在我的main.cpp文件中有:#include#include"gtest/gtest.h"intmain(){std::cout从我构建的终端:g++main

c - 如何让 pthreads 在 Windows 中工作?

我在尝试编译包含pthreads的代码时遇到了如下所述的错误warning:returntypedefaultsto'int'[-Wreturn-type]||Infunction'print_message_function':|warning:controlreachesendofnon-voidfunction[-Wreturn-type]||undefinedreferenceto`_imp__pthread_create'||undefinedreferenceto`_imp__pthread_create'||undefinedreferenceto`_imp__pthre