我有两个(或更多的线程)并行工作。他们的目的是测量硬件设备,并依赖外部硬件刺激。在执行过程中的某一时刻,它们触发硬件设备并等待刺激。但我只有一个刺激装置。
因此,线程必须等待,直到每个线程都准备好接受刺激。现在,另一个线程(可能是调度主线程)必须触发设备,并且线程可以继续运行。
同步这一点的最佳实践是什么?有动态数字线程更好吗?
编辑:我们使用CVI/Labwindows。这提供了一些线程,但主要是通过错误的文档宏。我已经想好了,如何注册线程,启动它们并等待它们完成。
似乎还有创建线程安全变量和锁的工具。但是它们的语法无法实现,因此我希望/需要自己构建某种互斥/信号量。
发布于 2012-12-04 10:33:23
因此,在1到2之间,您需要一个信号量(初始计数0,最大计数nThreads),它由每个工作线程发出信号一次,然后等待刺激线程N次。
在2到3之间,您还需要同步,因为工作线程应该等待刺激线程发送他的刺激。这也可以通过一个信号量(初始计数0,max计数1)来实现。
刺激的伪代码.线程:
init stimulus-semaphore and one semaphore for each worker-thread
start threads
while (1) {
for (int i=0;i<nThreads;i++)
wait for stimulus-semaphore
do the stimulus-thing
for (int i=0;i<nThreads;i++)
signal threads[i] semaphore
}工作线程的伪代码:
while (1) {
signal stimulus-semaphore
wait for this threads semaphore
do the work to be done after stimulus was sent
}发布于 2012-12-04 10:06:16
我不知道你是不是那个意思,唯一有多线程的C (ISO和ANSI)版本是C11。这方面没有太多的实现,所以您可能有不同的意思。
在C11中,线程间同步的工具是双重的。一种是经典的线程数据结构,即互斥变量和条件变量,其精神与POSIX线程中同样存在。(信号量只是一个可选的特性。)
C11中用于同步线程的第二个工具是atomic变量。这是一个在POSIX中没有同等功能的特性,但所有现代体系结构都对它进行了本机支持。
https://stackoverflow.com/questions/13700044
复制相似问题