我有一些单独的类,其中包含一些额外的函数,这些函数在单独的线程中运行。结构如下:
class Singleton
{
private:
boost::mutex mMutex;
std::vector<std::string> mMessages;
public:
void AddMessage(const std::string &msg)
{
mMutex.lock();
mMessages.push_back(msg);
mMutex.unlock();
}
void Sender()
{
while (true) {
mMutex.lock();
for (size_t i = 0; i < mMessages.size(); ++i)
{
// Do something with mMessages[i]
}
mMutex.unlock();
}
}
};
...
int main()
{
Singleton *handle;
handle = Singleton::instance();
boost::thread sender(boost::bind(&Singleton::Sender, handle));
... app cycle ...
}
有时会因错误而失败:
在抛出
的实例后终止调用'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::lock_error> >'
what(): boost::lock_error
Aborted
有什么可能,以及找出断言理由的最佳原因是什么?
答案 0 :(得分:2)
可能是您不创建对象Singleton
!因此,也不会创建互斥锁。
尝试:
int main()
{
Singleton handle; //object, not pointer
boost::thread sender(boost::bind(&Singleton::Sender, &handle));
...
}