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!