有没有办法将数据从一个正在运行的线程传递到另一个正在运行的线程。其中一个线程显示一个菜单,用户使用 cin 选择一个选项。另一个线程正在处理数据并每隔“X”时间将结果发送到服务器。由于我可以在cin指令中等待整个程序等待用户输入数据,所以我将程序分成两个线程。菜单的数据输入在其他线程中使用。
谢谢
据我所知,使用 pthreads 没有直接的方法可以将任意数据从一个线程传递到另一个线程。
但是,线程共享相同的内存空间;结果,一个线程可以修改内存中的对象,而另一个线程可以读取它。为避免竞争条件,访问此共享内存对象需要使用互斥锁进行同步。
线程#1:当用户响应时:锁定互斥体,修改对象并解锁互斥体。
线程#2:每个“x”时间段:锁定互斥体,读取对象状态,解锁互斥体,然后根据对象状态进行处理。
我在 http-server 中遇到了同样的问题,我让一个线程接受客户端套接字,但将它们分发到另一个线程。我的建议是,等待线程和处理线程使用同一个队列,并且将队列的指针传递给两个线程,等待线程在有用户输入时将数据写入队列,处理线程休眠直到队列不为空。例如:
ring_queue rq;//记得把rq的地址传给waiting_thread&dealing_thread
等待线程
while(true){
res = getInput();//block here
rq->put(res);
}
========================================
交易线程
while(true){
while(rq.isEmpty()){
usleep(100);
}
//not empty
doYourWorks();
}