zoukankan      html  css  js  c++  java
  • linux下的线程学习(二)

     1 #include <iostream>
     2 #include <pthread.h>
     3 
     4 void cleanup(void *arg) {
     5 
     6   printf("cleanup: %s
    ", (char*)arg);
     7 }
     8 
     9 void* thr_fn1(void *arg) {
    10   
    11   printf("thread1 start
    ");
    12   pthread_cleanup_push(cleanup, (void*)"thread 1 first handler");
    13   pthread_cleanup_push(cleanup, (void*)"thread 1 second handler");
    14   printf("thread1 push complete.
    ");
    15   
    16   if(arg) {
    17     return ((void*)1);
    18   }
    19 
    20   pthread_cleanup_pop(1);
    21   pthread_cleanup_pop(1);
    22 
    23   return ((void*)1);
    24 }
    25 
    26 void* thr_fn2(void *arg) {
    27   
    28   printf("thread2 start
    ");
    29   pthread_cleanup_push(cleanup, (void*)"thread 2 first handler");
    30   pthread_cleanup_push(cleanup, (void*)"thread 2 second handler");
    31   printf("thread2 push complete.
    ");
    32 
    33   if(arg) {
    34     pthread_exit((void*)2);
    35   }
    36 
    37   pthread_cleanup_pop(1);
    38   pthread_cleanup_pop(1);
    39 
    40   pthread_exit((void*)2);
    41 }
    42 
    43 int main() {
    44 
    45   int err;
    46   pthread_t tid1,tid2;
    47   void *tret;
    48 
    49   err = pthread_create(&tid1, NULL, thr_fn1, NULL);
    50   if(err != 0)
    51     printf("can't create thread 1: %s
    ", strerror(err));
    52 
    53   err = pthread_create(&tid2, NULL, thr_fn2, NULL);
    54   if(err != 0)
    55     printf("can't create thread 2: %s
    ", strerror(err));
    56 
    57   err = pthread_join(tid1, &tret);
    58   if(err != 0)
    59     printf("can't join with thread 1: %s
    ", strerror(err));
    60   printf("thread 1 exit code %d
    ", (int*)tret );
    61 
    62   err = pthread_join(tid2, &tret);
    63   if(err != 0)
    64     printf("can't join with thread 2: %s
    ", strerror(err));
    65   printf("thread 2 exit code %d
    ", (int*)tret );
    66 
    67   return 0;
    68 }

    使用pthread_cleanup_push pthread_cleanup_pop完成线程退出函数自动调用的功能;

  • 相关阅读:
    React native的static propTypes
    修改react native 的工程名
    react native的flatList
    react native获取键盘高度
    git reactNativeBle
    rn踩坑记录
    docker学习3-镜像的基本使用
    docker学习2-搭建centos7-python3.6环境
    docker学习1-CentOS 7安装docker环境
    Python3数据库封装
  • 原文地址:https://www.cnblogs.com/xuxu8511/p/3361205.html
Copyright © 2011-2022 走看看