pthread_cleanup_push 与 pthread_cleanup_pop 精简介绍

主要功能是防止线程同步的时候子线程被锁死

因为主线程可能在子线程运行时取消,而子进程内锁关闭了有没有打开,可以向栈中压如一个函数用来解锁,若果子线程没有被意外取消,可以用弹出栈内的函数。

pthread_cleanup_push与pthread_cleanup_pop是一一对应的
if(cnt == 0) //cnt相当于一个信号量,相当于一个锁一个标志位
{
cnt++;
pthread_cleanup_push(functiom , arg);
//子线程操作

//子线程在这里有可能被主线程程cancel
pthread_cleanup_pop(0); //形参为0则不会执行function,1则执行
cnt–;
}

void function(*arg)
{
cnt–;
}

你可能感兴趣的:(Linux)