c++多线程锁可以使用absl::Mutex std::mutex这两种,下面是demo代码。
使用absl:Mutex的时候打印:
[mutex.cc : 1338] RAW: Cycle:
[mutex.cc : 1352] RAW: mutex@0x683b68 stack:
@ 0x438562 absl::DebugOnlyDeadlockCheck()
@ 0x4387b2 absl::Mutex::Lock()
@ 0x4353d0 runThread2()
@ 0x7f12851c5184 start_thread
[mutex.cc : 1352] RAW: mutex@0x683b70 stack:
@ 0x438562 absl::DebugOnlyDeadlockCheck()
@ 0x4387b2 absl::Mutex::Lock()
@ 0x4352e2 runThread1()
@ 0x7f12851c5184 start_thread
[mutex.cc : 1357] RAW: dying due to potential deadlock
可以看到谷歌的锁代码有自动检查死锁功能,非常强悍。
std::mutex的锁直接死锁无任何提示。