当内核同时在2个或更多具有相同结构的cpu上工作时,屏障(如pthread_barrIEr)可能很有用.它将阻止所有cpu进入它,直到最后一个cpu运行屏障.从这时起,所有cpu都会再次运行.
解决方法 您可以使用完成获得等效行为: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);}总结
以上是内存溢出为你收集整理的linux-kernel – SMP linux内核中的障碍全部内容,希望文章能够帮你解决linux-kernel – SMP linux内核中的障碍所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)