Умер поток, содержащий мьютекс. Другой поток зайдет в тупик, когда вызовет «pthread_mutex_lock», хотя я использую атрибут «PTHREAD_MUTEX_ERRORCHECK».
#include <pthread.h>
#include <iostream>
#include <unistd.h>
using namespace std;
pthread_mutex_t mutex;
void *handler(void *)
{
cout << "child thread" << endl;
int ret = pthread_mutex_lock(&mutex);
cout << "child ret: " << ret << endl;
pthread_exit(NULL);
}
int main()
{
pthread_mutexattr_t attr;
pthread_mutexattr_init(&attr);
pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_ERRORCHECK);
pthread_mutex_init(&mutex, &attr);
pthread_mutexattr_destroy(&attr);
pthread_t tid;
pthread_create(&tid, NULL, handler, NULL);
sleep(2);
cout << "father awake" << endl;
int ret = pthread_mutex_lock(&mutex);
cout << "father ret: " << ret << endl;
return 0;
}
Выход:
[СРЕДА LINUX]: Linux ubuntu 3.19.0-25-generic # 26 ~ 14.04.1-Ubuntu SMP