pthread_testcancel用法简介

眉间皱痕 提交于 2020-02-26 15:18:23

文章目录
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;
}

————————————————
 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!