Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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_Multithreading_Centos_Pthreads - Fatal编程技术网

C 线程并等待数据

C 线程并等待数据,c,multithreading,centos,pthreads,C,Multithreading,Centos,Pthreads,这里是新的;) 我已经开始在CentOS上使用线程,我需要一些关于线程具体问题的帮助,因为我是这方面的初学者。 我有两个数组-输入和输出。他们有相同的大小N。我也有TNO线程。每个线程对输入数据的N/TNO块执行相同的操作,并将输出写入输出数组的N/TNO部分。此外,TNO表示多个数据源(每个源一个线程)。主程序连续接收来自某个源的数据,当一个源上的数据多于另一个源上的数据时,就会出现这种情况。下面是我想要实现的一种伪操作代码: void *thread_function(void *argum

这里是新的;) 我已经开始在CentOS上使用线程,我需要一些关于线程具体问题的帮助,因为我是这方面的初学者。
我有两个数组-输入和输出。他们有相同的大小N。我也有TNO线程。每个线程对输入数据的N/TNO块执行相同的操作,并将输出写入输出数组的N/TNO部分。此外,TNO表示多个数据源(每个源一个线程)。主程序连续接收来自某个源的数据,当一个源上的数据多于另一个源上的数据时,就会出现这种情况。下面是我想要实现的一种伪操作代码:

void *thread_function(void *argument){
while(1){
  wait for input data
  //DO SOMETHING
  send signal to main that thread work is done
  if(data_end)
    break

  }
}
main(){
initialization of variables
thread create
while(input_data){
  read input data
  send signal to threads that there is input data
  wait for all threads to finish their work
  write output data
  }
thread join
}
我做了很多研究,但是需要一些关于线程信号和从线程到主线程信号的帮助。除了输入和输出,我不想使用全局变量。另外,如果其中一个线程没有更多的数据要处理,我也不需要继续执行线程函数的某些部分。 我的主要问题是如何实现这些等待,以及当我跳过执行某些操作(该线程没有更多数据)部分时应该做什么


谢谢

看看
pthread\u cond\u wait
pthread\u cond\u signal
。顺便问一下,什么是“TNO线程”?这不是我遇到的标准术语,快速的谷歌搜索并没有启发我。“TNO代表许多数据源(每个源一个线程)。”如问题解释中所述。我以前看过你建议的函数,但不知道如何在线程函数和主函数中实现它们以及互斥。要写出一个好的答案太难了,我试着。。。一个好的答案取决于您对安全共享状态的理解,以及对前面提到的原语的理解。尝试可能是一个好主意,纠正尝试可能比从一开始就解释它更容易。