Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用C+中的pthread将数据从一个线程传递到另一个正在运行的线程+;_C++_Linux_Pthreads - Fatal编程技术网

C++ 如何使用C+中的pthread将数据从一个线程传递到另一个正在运行的线程+;

C++ 如何使用C+中的pthread将数据从一个线程传递到另一个正在运行的线程+;,c++,linux,pthreads,C++,Linux,Pthreads,是否有一种方法可以将数据从一个正在运行的线程传递到另一个正在运行的线程。其中一个线程显示菜单,用户使用cin选择一个选项。另一个线程正在处理数据,并每隔“X”个时间段将结果发送到服务器。由于我可以在cin指令中等待整个程序等待用户输入数据,所以我将程序分为两个线程。菜单的数据输入用于另一个线程 谢谢据我所知,使用pthreads无法直接将任意数据从一个线程传递到另一个线程 但是,线程共享相同的内存空间;因此,一个线程可以修改内存中的对象,另一个线程可以读取它。为了避免竞争条件,访问此共享内存对象

是否有一种方法可以将数据从一个正在运行的线程传递到另一个正在运行的线程。其中一个线程显示菜单,用户使用cin选择一个选项。另一个线程正在处理数据,并每隔“X”个时间段将结果发送到服务器。由于我可以在cin指令中等待整个程序等待用户输入数据,所以我将程序分为两个线程。菜单的数据输入用于另一个线程


谢谢

据我所知,使用pthreads无法直接将任意数据从一个线程传递到另一个线程

但是,线程共享相同的内存空间;因此,一个线程可以修改内存中的对象,另一个线程可以读取它。为了避免竞争条件,访问此共享内存对象需要使用互斥锁进行同步

线程#1:当用户响应时:锁定互斥锁,修改对象并解锁互斥锁


线程#2:每“x”一段时间:锁定互斥锁,读取对象状态,解锁互斥锁,然后根据对象状态进行处理。

我在http服务器中遇到过同样的问题,我得到一个线程来接受客户端套接字,但将它们分发给另一个线程。我的建议是,等待线程和交易线程使用同一个队列,您将队列指针传递给这两个线程,等待线程在有用户输入时将数据写入队列,交易线程将休眠直到队列不为空。例如:

环形队列rq//记住将rq的地址传递给等待线程和处理线程

等待线程

while(true){
    res = getInput();//block here
    rq->put(res);
}
while(true){
    while(rq.isEmpty()){
        usleep(100);
    }

    //not empty
    doYourWorks();
}
=======================================

交易线索

while(true){
    res = getInput();//block here
    rq->put(res);
}
while(true){
    while(rq.isEmpty()){
        usleep(100);
    }

    //not empty
    doYourWorks();
}

听起来像是一个典型的生产者/消费者问题:可能使用条件变量(用于通知对象内部的更改)会很有用。