【发布时间】:2018-11-24 04:27:34
【问题描述】:
我不清楚互斥锁和锁是如何工作的。
我有一个对象(my_class),我在主线程中从对象中添加、删除和读取数据。在我的第二个线程中,我想检查我的对象中的一些数据。问题是,在从第二个线程读取数据期间,当我在主线程中删除对象时,可能会导致应用程序崩溃。
因此,我在第二个线程中创建了std::lock_guard<std::mutex> lock(mymutex)。
我创建了测试并且使用这个 lock_guard 它永远不会崩溃。但我不知道我是否也需要在主线程中使用锁。
问题是,当第二个线程锁定互斥体并读取数据并且主线程想要从对象中删除数据但没有锁定时会发生什么? 否则当第二个线程想要锁定互斥体并从对象中读取数据而主线程从对象中删除数据时会发生什么?
【问题讨论】:
-
std::lock_guard只是一个 RAII 包装器,用于锁定互斥锁并在互斥锁超出范围时自动解锁。这样您就不必手动操作了。如何以及在何处使用它有点过于宽泛。 -
你需要两把锁
-
this 是否充分回答了您的问题?您的困惑似乎归结为根本不知道互斥锁的用途。
标签: c++ multithreading mutex