首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SMP linux内核中的障碍

SMP linux内核中的障碍
EN

Stack Overflow用户
提问于 2010-04-02 10:49:18
回答 2查看 849关注 0票数 3

在SMP Linux内核中是否有像pthread_barrier这样的smth?

当内核同时在2个或更多具有相同结构的CPU上工作时,屏障(如pthread_barrier)可能会很有用。它将停止所有进入它的CPU,直到最后一个CPU运行屏障。从这一刻起,所有的CPU都能正常工作。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-04-02 23:12:14

您可能可以使用补全来获得等效的行为:

代码语言:javascript
复制
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);
}
票数 5
EN

Stack Overflow用户

发布于 2010-04-02 11:40:00

我不熟悉pthread_barrier()结构,但是内核有大量的内存屏障选项。

有关文档,请参阅lxr memory barriers

如果您试图强制一组线程相互等待,您可能可以使用互斥和/或等待队列将一些东西组合在一起-尽管我不确定您何时会这样做。你什么时候想让线程互相等待呢?我现在很好奇。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2564782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档