pthread_cleanup_push

#define pthread_cleanup_push(func, val) \

   { \

    struct __darwin_pthread_handler_rec __handler; \

    pthread_t __self = pthread_self(); \

    __handler.__routine = func; \

    __handler.__arg = val; \

    __handler.__next = __self->__cleanup_stack; \

    __self->__cleanup_stack = &__handler;

 

#define pthread_cleanup_pop(execute) \

    /* Note: 'handler' must be in this same lexical context! */ \

    __self->__cleanup_stack = __handler.__next; \

    if (execute) (__handler.__routine)(__handler.__arg); \

   }

posted @ 2018-01-22 21:57  zzfx  阅读(173)  评论(0编辑  收藏  举报