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);

   }

原文地址:https://www.cnblogs.com/feng9exe/p/8331348.html