文章目录
pthread_testcancel用法简解
pthread_testcancel用法简解
某些情况下,希望通过pthread_cancel结束某个线程,但是被结束的线程必须在某一个点来进行退出操作,就需要用到pthread_testcancel。
示例代码如下
#include <pthread.h>
#include <iostream>
#include <unistd.h>
using std::endl;
using std::cout;
void* test_cannel(void* arg)
{
pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,NULL);
pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED,NULL);
while(true)
{
pthread_setcancelstate(PTHREAD_CANCEL_DISABLE,NULL);
cout << "1" << endl;
cout << "2" << endl;
cout << "3" << endl;
cout << "4" << endl;
cout << "5" << endl;
cout << "6" << endl;
cout << "7" << endl;
pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,NULL);
pthread_testcancel();
}
}
void* test_no_cannel(void* arg)
{
//pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS,NULL);
while(true)
{
cout << "1" << endl;
cout << "2" << endl;
cout << "3" << endl;
cout << "4" << endl;
cout << "5" << endl;
cout << "6" << endl;
cout << "7" << endl;
//sleep(1);
}
}
int main()
{
pthread_t p1;
pthread_create(&p1,NULL,test_cannel,NULL);
sleep(1);
pthread_cancel(p1);
pthread_join(p1,NULL);
return 0;
}
————————————————
来源:CSDN
作者:EmbededDriver
链接:https://blog.csdn.net/u012308586/article/details/104516509