#include #include #include void *task1(void *data) { for (int i = 0; i < 10; i++) { printf("%ld 子线程执行了 %d 次\n", pthread_self(), i + 1); sleep(1); } return NULL; } void *task2(void *data) { for (int i = 0; i < 100; i++) { if (i % 2 == 0) printf("%ld 子线程, 偶数 %d 次\n", pthread_self(), i); sleep(1); } return NULL; } void *clear(void *args) { char *msg = (char *)args; printf("清退: %s\n", msg); } int main() { pthread_t tid, tid2; pthread_create(&tid, NULL, task1, NULL); pthread_create(&tid2, NULL, task2, NULL); pthread_cleanup_push(clear, "task1"); pthread_cleanup_push(clear, "task2"); pthread_join(tid2, NULL); pthread_cleanup_pop(1); pthread_join(tid, NULL); pthread_cleanup_pop(1); return 0; }