は、私はこのコード私は「::後押し::繊維をlock_error」だと
class ttt {
public:
~ttt() {
LOG(INFO);
flush();
}
bool flush() {
//std::lock_guard<boost::fibers::mutex> lock(_mutex);
LOG(INFO);
_mutex.lock();
LOG(INFO);
auto ret = flush_nonlock();
LOG(INFO);
_mutex.unlock();
LOG(INFO);
return ret;
}
private:
bool flush_nonlock() {
LOG(INFO);
return std::rand()%2;
}
boost::fibers::mutex _mutex;
};
int main() {
static ttt t;
std::cout << t.flush() << std::endl;
return 0;
}
を実行して、私は最後にそれを記録し、印刷の前で
terminate called after throwing an instance of 'boost::fibers::lock_error'
what(): boost fiber: a deadlock is detected: Resource deadlock avoided
を得た理由を把握することはできません_mutex.lock()。 tが静的変数でない場合は、エラーは発生しません。 メインfuncでt.flush()を削除しても、エラーは発生しません。 私がメモに書いたようにstd :: lock_guardを使用すると、その隣の行は印刷されません。 私が試したケースについて、なぜ、どのような違いがあるのか分かりません。
iは-O0
'LOG(INFO)'は何をしていますか? – snoopy
私はプログラムがエラーを投げる行を見つけようとします。 – beegerous