「yamasaのネタ帳」のマルチスレッド関連のポストを見て知ったこと。
- 同期オブジェクトによる相互排他は古くからあるが、それに加えて現代ではパフォーマンス面からLockfreeという考え方が主流となってきている。
- InterlockXXXAPIはメモリバリアとしては有効に機能しない環境がある。
- volatileはマルチスレッド用のキーワードではない。機能としては不十分である。
- Double-Checked Lockingはatomic変数とかメモリバリアを使用しないと有効でない。
- C++11にはマルチスレッドをサポートする機能が実装されている。
そういうわけでロックを可能な限り排除して実装してみようかなと思っている。残念ながらVC++2010にはC++11のマルチスレッドをサポートする機能はないので、Boost.Atomicライブラリを使ってみようと思う。