有没有办法将数据从一个正在运行的线程传递到另一个正在运行的线程。其中一个主题显示一个菜单,用户使用cin选择一个选项。另一个线程正在处理数据并在每个“X”时间段将结果发送到服务器。因为我可以在cin指令中等待整个程序等待用户输入数据,所以我将程序分成两个线程。菜单的数据输入用于另一个线程。
由于
答案 0 :(得分:1)
据我所知,使用pthreads没有直接的方法将任意数据从一个线程传递到另一个线程。
但是,线程共享相同的内存空间;因此,一个线程可以修改内存中的对象,另一个可以读取它。要避免竞争条件,访问此共享内存对象需要使用互斥锁进行同步。
线程#1:当用户响应时:锁定互斥锁,修改对象并解锁互斥锁。
线程#2:每隔“x”段时间:锁定互斥锁,读取对象状态,解锁互斥锁,然后根据对象状态进行处理。
答案 1 :(得分:0)
我在http服务器中遇到同样的问题,我得到一个线程来接受客户端套接字,但是将它们分发给另一个线程。我的建议是,等待线程和交易线程使用相同的队列,并将队列的指针传递给两个线程,等待线程在有用户输入时将数据写入队列,以及处理线程睡觉,直到队列不为空.Eg:
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();
}