C中线程之间最快的通信
这个问题与关于线程的问题类似,但有所不同。
我有一个程序可以将耗时的计算拆分为可以并行运行的不同作业。具体有步骤A,然后是步骤B,重复多次。所以程序运行ABABAB...等。
所以我有一个线程来控制事物,它的工作是告诉 N 个其他线程开始步骤 A,然后开始步骤 B。重要的是只有在上一步的所有线程都完成后才开始下一步。
所以伪代码可能类似于
for (n=0;n<N;n++)
Set variable in common memory to 1 for each thread to start step A;
do {
sum = 0; add variable for each thread to sum in a loop
} while (sum!=0)
/* Threads set their variable to 0 when their calculations are complete*/
... < Similar code to start and monitor step B>
所以我的问题是…………有没有更好的方法在线程之间发送消息(我想答案是肯定的)……有更好的方法更快或至少一样快吗?(我想答案可能是否定的......但真的很想听听对此的任何想法)
哦,应该说目的是将每个进程锁定在单个内核上以提高速度。
编辑
非常感谢所有评论和关于查看C pthread 同步功能的建议——这个问题非常相关——但是,它并没有回答关于速度的问题。- 在@Willis 的回答中,他指出所有线程不断旋转以检查公共内存中变量的状态......并且评论提到了竞争条件和调试困难的潜在问题......
.... 尽管我试图在伪代码中概述该方法的潜在缺点,但我很想知道 pthread.h 中建议的“障碍”方法是否与伪代码中的方法一样快、更快或更慢代码。
也许我可以在上面的原始问题中更清楚......步骤A和B将需要重复1e6到1e9次 - 或者在合理的时间内尽可能多次,所以我非常警惕任何潜在的阻碍在同步线程....这有意义吗?