boost::wait_condition を使用して、新しいデータが利用可能になるまでスレッドをスリープさせようとしています。私の関数はこれに縮小されます:
bool Node::waitForNewData() const
{
boost::unique_lock<boost::mutex>(mWasNotifiedMutex);
mWasNotified = false;
while (true)
{
if (mWasNotified)
return true;
if (mThreadIsRequestedToStop)
return false;
mWasNotifiedWaitCondition.wait(mWasNotifiedMutex);
}
}
Boost は、次のメッセージを含む wait() 関数から例外をスローしています。
boost unique_lock has no mutex: Operation not permitted
待機状態を通知するために、次のような関数を使用しています。
void Node::callbackNewDataArrived()
{
{
boost::unique_lock<boost::mutex>(mHasNewInletDataMutex);
mWasNotified = true;
}
mWasNotifiedWaitCondition.notify_all();
}
およびヘッダー内のこれらの宣言:
class Node
{
// ...
mutable bool mWasNotified;
mutable boost::mutex mWasNotifiedMutex;
mutable boost::condition_variable mWasNotifiedWaitCondition;
std::atomic<bool> mThreadIsRequestedToStop;
};
OSX 10.8.5でc++ 11サポートを有効にして、Xcode 4.6.2でビルドしています。私のブーストライブラリはで構築されました
./b2 toolset=clang cxxflags="-std=c++11 -stdlib=libc++ -arch i386 -arch x86_64" macosx-version=10.6 linkflags="-stdlib=libc++" --prefix=/usr/local -j 10 define=BOOST_SYSTEM_NO_DEPRECATED stage release
私がリンクしているブーストライブラリは
libboost_chrono.a
libboost_date_time.a
libboost_filesystem.a
libboost_system.a
libboost_thread.a
ここで何が間違っているのか分かりますか?