是否可以跳到进程分配的时间量的末尾?我有一个程序在一块共享内存上并行工作,然后所有进程需要等待其他进程完成并在下一步之前同步。每个进程最多会进行一次迭代,因此任何时序差异都很小。
微睡眠几乎可以起作用,但我很确定即使是睡眠(1)也需要比我想要的更长的时间(截至目前我可以在大约1.5秒内完成5000次,所以这会增加大约20ms到一个检验)。某种忙碌的等待似乎是一个坏主意,尽管这可能是我最终会遇到的。
我真正想要的是
while(*everyoneDone != 0) {
//give up rest of this time-quantum
}
它不需要是实时的,它只需要快速。有什么想法吗?
请注意,这将在multiproc机器上运行,因为如果只有一个内核可以使用,那么现有的单线程版本将会表现更好。
答案 0 :(得分:1)
您没有说明您正在使用哪种操作系统,但如果它是POSIX,那么sched_yield()
可能就是您正在寻找的。 p>
但实际上,使用正确的同步原语(如信号量)几乎肯定会更好。
答案 1 :(得分:1)
不要这样做,在应用程序上下文中,主动等待几乎总是一个坏主意。使用pthread_barrier_t
,这正是为您的目的预见的工具。