0

別のスレッドで実行されるいくつかの追加機能を備えたシングルトンクラスがいくつかあります。構造は次のようになります。

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

それは何である可能性があり、主張の理由を見つけるための最良の理由は何ですか?

4

1 に答える 1

2

オブジェクトを作成しなかった可能性がありSingletonます。したがって、ミューテックスも作成されません。

試す:

int main()
{
   Singleton handle; //object, not pointer
   boost::thread sender(boost::bind(&Singleton::Sender, &handle));
   ...
}
于 2012-07-10T08:15:47.953 に答える