Tasuku SUENAGA
a****@razil*****
2009年 3月 24日 (火) 18:47:57 JST
末永です。
Tokyo Cabinetのconfigureオプションとして存在する、
--enable-uyieldをgroongaに移植しました。
このconfigureオプションは、
assert/if/whileをマクロで置換し、
ある一定の割合でsched_yield()を呼び出すようにするものです。
(sched_yield()がない場合は、usleep(1000 * 20)をします。)
また、ソースコード中にGRN_TESTYIELD();をはさむことによって、
そこでも上記のような処理を行うことができるようにしてあります。
このオプションを使うことにより、
コンテキストスイッチが多発します。
その結果レースコンディション等が検出しやすくなることを期待しています。
特に、テストプログラムとの相乗効果を期待しています。
それに伴い、特にwhileを使う場合において
ソースコードの書き方に制約ができます。
以下のように、
assert/if/whileの中でカンマ演算子を使って
複数の文を記述することができなくなりました。
while (a = 0, func()) {
...
}
このように、カンマ演算子を使う場合には、
以下のように条件文を全てカッコでくくってください。
while ((a = 0, func())) {
...
}
---
tasuku