在SMP Linux内核中是否有像pthread_barrier这样的smth?
当内核同时在2个或更多具有相同结构的CPU上工作时,屏障(如pthread_barrier)可能会很有用。它将停止所有进入它的CPU,直到最后一个CPU运行屏障。从这一刻起,所有的CPU都能正常工作。
发布于 2010-04-02 23:12:14
您可能可以使用补全来获得等效的行为:
struct fake_barrier_t {
atomic_t count;
struct completion comp;
}
/* run before each pass */
void initialize_fake_barrier(struct fake_barrier_t* b)
{
atomic_set(&b->count, 0);
init_completion(&b->comp);
}
/* make all tasks sleep until nth arrives, then wake all. */
void fake_barrier(struct fake_barrier_t* b, int n)
{
if (atomic_inc_return(&b->count) < n)
wait_for_completion(&b->comp);
else
complete_all(&b->comp);
}发布于 2010-04-02 11:40:00
我不熟悉pthread_barrier()结构,但是内核有大量的内存屏障选项。
有关文档,请参阅lxr memory barriers
如果您试图强制一组线程相互等待,您可能可以使用互斥和/或等待队列将一些东西组合在一起-尽管我不确定您何时会这样做。你什么时候想让线程互相等待呢?我现在很好奇。
https://stackoverflow.com/questions/2564782
复制相似问题