忘れないうちに今日はpreempt_disableを見てみましょう。
実体はinclude/linux/preempt.hにあります。
======
#define preempt_disable() \======
do { \
inc_preempt_count(); \
barrier(); \
} while (0)
inc_preempt_countでプリエンプションのカウンタをインクリメントしています。preempt_enableのときは逆にデクリメントします。その後のbarrierは最適化しないでね、とコンパイラに指示するものです。
do-while文ですが条件が0固定なので1度しか実行されません。敢えてdo-whileにしているのでしょうが、なぜなのでしょう?
と思って調べてみたら解説がありました。
[ruby-dev:11748] Re: do while(0)
なるほど。。。
0 件のコメント:
コメントを投稿