zoukankan      html  css  js  c++  java
  • ch4学习笔记

    知识点归纳

    问题和解决思路

    pthread_cancel()不能杀死线程

      1 #include <stdio.h>
      2 #include <stdlib.h>
      3 #include <unistd.h>
      4 #include <pthread.h>
      5 #include <string.h>
      6 
      7 void *func(void *arg){
      8     while(1);
      9     return NULL;
     10 }
     11 int main(){
     12     printf("main:pid=%d,tid=%lu
    ",getpid(),pthread_self());
     13 
     14     pthread_t tid;
     15     int ret = pthread_create(&tid,NULL,func,NULL);
     16     if(ret != 0){
     17         fprintf(stderr,"pthread_create error:%s
    ",strerror(ret));
     18         return 1;
     19     }
     20 
     21     ret = pthread_cancel(tid);
     22     if(ret != 0){
     23         fprintf(stderr,"pthread_cancel error:%s
    ",strerror(ret));
     24         return 2;
     25     }
     26 
     27     pthread_exit((void*)0);
     28 
     29     return 0;
     30 }
    
    

    原因:

    使用pthread_cancel()终止线程,需要线程中存在取消点。

    大致是需要线程中有陷入内核的操作,才会存在取消点

    如果想要用pthread_cancel()终止一个没有陷入内核操作的线程,就需要手动添加取消点

    在while循环中加入,pthread_testcancel()即可用pthread_cancel()杀死该线程

      7 void *func(void *arg){
      8     while(1) pthread_testcancel();
      9     return NULL;
     10 }
    
    

    实践内容

  • 相关阅读:
    hdu 4508
    hdu 4506
    hdu 4505
    hdu 1525
    hdu 2212
    (贪心)删数问题
    (最短路 Dijkstra) hdu 1544
    (次小生成树) poj 1679
    (prim)hdu 1102
    (kruskal)hdu 1863
  • 原文地址:https://www.cnblogs.com/cfqlovem-521/p/15484734.html
Copyright © 2011-2022 走看看