boost::threadとstd::thread周りを調べてたら
こんな記事を見つけました。
http://msdn.microsoft.com/ja-jp/magazine/cc163405.aspx
以下記事内に書かれているWindows Vista以降で使用可能な関数とPosixとの対応表を作ってみました。
Posix | After Windows Vista |
pthread_cond_init | InitializeConditionVariable |
pthread_cond_timedwait | SleepConditionVariableCS SleepConditionVariableSRW |
pthread_cond_signal | WakeConditionVariable |
pthread_cond_broadcast | WakeAllConditionVariable |
pthread_cond_destroy | なし |
pthread_once | InitOnceExecuteOnce |
pthread_rwlock_init | InitializeSRWLock |
pthread_rwlock_destroy | なし |
pthread_rwlock_rdlock pthread_rwlock_unlock pthread_rwlock_wrlock |
AcquireSRWLockExclusive ReleaseSRWLockExclusive AcquireSRWLockShared ReleaseSRWLockShared |
できればC++プログラマーなら新しい標準規格である「C++0x」からは
std::unique_lock
再帰ロック不可な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