thread_12

#include <stdlib.h>
#include <pthread.h>
#include <stdio.h>
#include <sched.h>
int a = 0;
void *thread1(void *arg)
 {
       // pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
        //如果把这行代码加上 a的值会改变的
         a = 10;
        printf("start thread (%u)\n", (unsigned)pthread_self());
 }
 int main(int argc, char *argv[])
{
         pthread_t  t1, t2, t3;
         int ret, i;
        printf("main start\n");
        ret = pthread_create(&t1, NULL, thread1, NULL);
        if(ret != 0)
         {
                 printf("create thread failed\n");
                exit(1);
         }
         pthread_cancel(t1);
        pthread_join(t1, NULL);
       sleep(3);
       printf("main end, a=%d\n", a);
     return 0;
 }
/*运行结果: 设置为异步模式,在没到达取消点之前就结束了,a没被改动。如果把13行注释,a会被改动。
main start
main end, a=0*/
时间: 2024-12-19 07:26:11

thread_12的相关文章

并发编程常用工具类之countDownLatch和cyclicBarrier的使用对比

1.CountDownLatch           countDownLatch的作用是让一组线程等待其他线程完成工作以后在执行,相当于加强版的join(不懂可以百度一下join的用法),一般在初始化的时候会在构造方法传入计数器, 后续,在其他线程中每次调用countDown方法计数器减一,一般在需要等待的线程中调用countDownLatch的await方法阻塞线程,在当计数器为0时,等待线程继续运行. 光看上面的定义描述不是很直观,我们再来结合代码看一下实际运用: 1 public cla