Check following simple C++
program:
#include <mutex>
int main(void)
{
std::mutex m;
m.lock();
return 0;
}
The mutex m
forgot unlock
itself before exiting main
function:
m.unlock();
Test it on GNU/Linux
, and I chose ArchLinux
as the testbed:
$ uname -a
Linux fujitsu-i 4.13.7-1-ARCH #1 SMP PREEMPT Sat Oct 14 20:13:26 CEST 2017 x86_64 GNU/Linux
$ clang++ -g -pthread -std=c++11 test_mutex.cpp
$ ./a.out
$
The process exited normally, and no more words was given. Build and run it on OpenBSD 6.2
:
# clang++ -g -pthread -std=c++11 test_mutex.cpp
# ./a.out
pthread_mutex_destroy on mutex with waiters!
The OpenBSD
prompts “pthread_mutex_destroy on mutex with waiters!
“. Interesting!