boost::threadとstd::thread周りを調べてたら


こんな記事を見つけました。
http://msdn.microsoft.com/ja-jp/magazine/cc163405.aspx
以下記事内に書かれているWindows Vista以降で使用可能な関数とPosixとの対応表を作ってみました。

PosixAfter Windows Vista
pthread_cond_initInitializeConditionVariable
pthread_cond_timedwaitSleepConditionVariableCS
SleepConditionVariableSRW
pthread_cond_signalWakeConditionVariable
pthread_cond_broadcastWakeAllConditionVariable
pthread_cond_destroyなし
pthread_onceInitOnceExecuteOnce
pthread_rwlock_initInitializeSRWLock
pthread_rwlock_destroyなし
pthread_rwlock_rdlock
pthread_rwlock_unlock
pthread_rwlock_wrlock

AcquireSRWLockExclusive
ReleaseSRWLockExclusive
AcquireSRWLockShared
ReleaseSRWLockShared

できればC++プログラマーなら新しい標準規格である「C++0x」からは
ヘッダにある
std::unique_lockを要求するstd::condition_variable / ユーザ定義のlockとunlockを実装したクラスを受け取る std::condition_variable_any
ヘッダにある
再帰ロック不可なstd::mutex / 再帰ロック不可なタイマー付std::timed_mutex
再帰ロック可なstd::recursive_mutex / 再帰ロック可なタイマー付std::recursive_timed_mutex
スレッドセーフな1度だけの呼び出しにはstd::once_flagを使用したstd::call_once
を使ってほしいですせっかく標準でサポートされるわけですから。
使い方はこことかを読むと良くわかると思います。
C++0xのマルチスレッド機能


そういえばread write lockに相当するものはC++0xのmutexには含まれてないのですねー。
boostにも以前はread_write_mutexというのがあったのですがバグがあって今は無くなってます。
そんなわけで作ってみます。とか思ったけどすでに1年以上も前にmelponさんが作ってたのを見つけてしまいました。
melpon日記 - C++すら(ry Read-Write Lock
read_write_mutexのコードの部分をコピペして
#include

#include
#include
に修正して
boost::condition をstd::condition_variableに修正、
boost::mutex::scoped_lockはstd::uniqe_lockに直せば良いだけですかね。
#コードの中身は流し読みですw