busyloop, cpu_relax与msleep(0)

2510阅读 0评论2016-12-15 areece
分类:LINUX

内核中有时免除不了busy, 一种是

  1. while (my_variable != what_i_want)
  2.       ;
另外一种是

  1. while (my_variable != what_i_want)
  2.   msleep(0)
还有一种是

  1. while (my_variable != what_i_want)
  2.   cpu_relax()
第一种由于忙占cpu,所以千万不要那么写,会导致CPU占用率奇高,而且,由于没有barrier,有时候优化会导致代码根本停下下来,有时不得不救助于volatile;第二种对于cpu的占用率有一些帮助,但是也有前面barrier与优化的问题。理论上讲,第三种最好,是kernel建议的做法,cpu_relax除了让出cpu外,还可以作为compiler barrier。


上一篇:C或者其它语言的++, --是先加还是后加的小收获
下一篇:shell命令之pgrep, pkill