如何不使用pthread_cancel而殺死線程


During the time I use standalone cross compliers to build my system, I find there is NO pthread_cancel in pthread.h (/home/dengwei/standalone-toolchain/sysroot/usr/include/pthread.h).

Shocked by that, but here comes the solution, by using pthread_kill to send a signal , and adding a signal handler :

#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
#include <sys/types.h>
#include <errno.h>
pthread_t pid;
void handle_quit( int signo)
{
    printf( " in qq handle sig %d \n ", signo);
    pthread_exit(NULL);
    
}
void* test( void *arg)
{
    signal(SIGQUIT,handle_quit );
     for( int i= 0;i< 100;i++)
    {
        printf( " in pthread test \n ");
        sleep( 1);
    }

}
int main( void)
{
    printf( " begin \n ");
    pthread_create(&pid, NULL , test, NULL);
    sleep( 3);
     if(pthread_kill(pid,  0)!= ESRCH)
    {
        printf( " thread %d exists!\n ", pid);
        pthread_kill(pid, SIGQUIT);
//         pthread_exit(NULL); // this won't work
        printf( " after kill\n ");
    }

    sleep( 1);
    printf( " exit in main\n ");
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM