0

クラスでは、このような関数に対してミューテックスを使用したい

void Agent::notify(Packet& packet, Peer peer) {
    boost::mutex::scoped_lock lock(mutex_);
    ...
}

コンパイル プロセスに問題はありません。しかし、プログラムを実行すると、次の行でブーストが常に失敗します。

terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::lock_error> >'
  what():  boost: mutex lock failed in pthread_mutex_lock: Invalid argument
Abandon (core dumped)

lock()orunlockメソッドを使用しようとしましたが、同じ問題です。私が使用するときtry_lock、条件は常に false で失敗しません。

インターネットで検索すると、このhttps://svn.boost.org/trac/boost/ticket/9307が見つかりました。

しかし、問題は私のプログラムだと思いますが、どこにあるのかわかりません。私のテストでは、この関数に入るスレッドは 1 つだけです。

4

1 に答える 1

0

問題は、プログラム内でミューテックスを使用するスレッドが同じレベルにある必要があることです。しかし、このエラーを作成したスレッドはメイン スレッドでした。作成されたものではありません。

于 2014-12-27T13:19:37.840 に答える