今天在使用stl的mutex过程中出现了异常,初步研究是由于mutex的加锁和解锁在分别在不同线程中执行所导致。
所以,对于mutex而言,加锁和解锁都要在同一线程中,而不应该是一个线程加锁,另一个去解锁。
官方文档的解释:
对于lock:
Blocks the calling thread until the thread obtains ownership of the mutex
.
注意事项:If the calling thread already owns the mutex
, the behavior is undefined.
对于unlock:
Releases ownership of the mutex
.
注意事项:If the calling thread does not own the mutex
, the behavior is undefined.
总结起来就是一句话:不能在同一线程中同时调用两次lock或两次unlock(没有配对的情况下);某个线程a执行了lock则必须执行unlock。