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_X

char * 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_X

char * 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]

 

你可能感兴趣的:(pthread)