首页 > 代码库 > Linux多线程实例练习 - pthread_cancel()

Linux多线程实例练习 - pthread_cancel()

Linux多线程实例练习 - pthread_cancel

1、代码 xx_pthread_cancel.c

#include <pthread.h>#include <stdio.h>#include <unistd.h>#define debug_Msg(fmt, arg...)    do{        printf("%s %d : ", __FILE__, __LINE__);        printf(fmt, ##arg);    }while(0)#define ENABLE_Xchar * pe = "enable  return";void * state_Enable(void *arg){    int i = 0;    int iExit = 0;    while(i < 10 && iExit == 0)    {        debug_Msg("state Enable  : [%d]\n", i);        i++;        sleep(1);    }    char * p = pe;    return p;}#define DISABLE_Xchar * pd = "disable return";void * state_Disable(void * arg){    pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL);    int i = 0;    int iExit = 0;    while(i < 10 && iExit == 0)    {        debug_Msg("state Disable : [%d]\n", i);        i++;        sleep(1);    }    char * p = pd;    return p;}int main(){#ifdef ENABLE_X    pthread_t pid;    pthread_create(&pid, NULL, state_Enable, NULL);    sleep(3);    pthread_cancel(pid);    void * p = NULL;    printf("init with : [%08X]\n", (unsigned int)p);    pthread_join(pid, &p);    printf("pe addr   : [%08X]\n", (unsigned int)pe);    printf("over with : [%08X]\n", (unsigned int)p);#endif#ifdef DISABLE_X    pthread_t pDis;    pthread_create(&pDis, NULL, state_Disable, NULL);    sleep(3);    pthread_cancel(pDis);    p = NULL;    printf("init with : [%08X]\n", (unsigned int)p);    pthread_join(pDis, &p);    printf("pd addr   : [%08X]\n", (unsigned int)pd);    printf("over with : [%08X]\n", (unsigned int)p);#endif}

 

2、CentOS 编译通过

g++ -g -c -o xx_pthread_cancel.o xx_pthread_cancel.c g++ -g -o xx_pthread_cancel xx_pthread_cancel.o -lpthread

3、运行结果

$ ./xx_pthread_cancel xx_pthread_cancel.c 19 : state Enable  : [0]xx_pthread_cancel.c 19 : state Enable  : [1]xx_pthread_cancel.c 19 : state Enable  : [2]init with : [00000000]pe addr   : [08048959]over with : [FFFFFFFF]xx_pthread_cancel.c 36 : state Disable : [0]xx_pthread_cancel.c 36 : state Disable : [1]xx_pthread_cancel.c 36 : state Disable : [2]init with : [00000000]xx_pthread_cancel.c 36 : state Disable : [3]xx_pthread_cancel.c 36 : state Disable : [4]xx_pthread_cancel.c 36 : state Disable : [5]xx_pthread_cancel.c 36 : state Disable : [6]xx_pthread_cancel.c 36 : state Disable : [7]xx_pthread_cancel.c 36 : state Disable : [8]xx_pthread_cancel.c 36 : state Disable : [9]pd addr   : [08048968]over with : [08048968]

 

Linux多线程实例练习 - pthread_cancel()