#include <stdio.h> #include <pthread.h> #include <stdlib.h> pthread_once_t once = PTHREAD_ONCE_INIT; void run(void) { printf("Function run is running in thread %d\n", pthread_self()); } void * thread1(void * arg) { pthread_t thid = pthread_self(); printf("Current thread1's ID is %d\n", thid); pthread_once(&once , run); printf("Thread1 ends\n"); return NULL; } void * thread2(void * arg) { pthread_t thid = pthread_self(); printf("Current thread2's ID is %d\n", thid); pthread_once(&once , run); printf("Thread2 ends\n"); return NULL; } int main(void) { pthread_t thid1, thid2; pthread_create(&thid1, NULL, thread1, NULL); pthread_create(&thid2, NULL, thread2, NULL); sleep(3); printf("Main thread exit!\n"); return 0; }解释代码
时间: 2024-04-27 07:22:28 浏览: 130
#include <stdio.h>
该代码是一个使用pthread_once函数的示例程序。具体说明如下:
- 在头文件中引入了pthread.h和stdlib.h,pthread.h提供了pthread_once函数,stdlib.h提供了NULL常量。
- 定义了一个pthread_once_t类型的变量once,并初始化为PTHREAD_ONCE_INIT,该变量用于保证函数run只会被执行一次。
- 定义了一个函数run,用于输出当前线程的ID。
- 定义了两个线程函数thread1和thread2,每个线程函数先输出自己的ID,然后调用pthread_once函数,该函数保证函数run只会被执行一次。
- 在main函数中,先创建两个新的线程thid1和thid2,分别执行线程函数thread1和thread2。
- main函数中使用sleep函数等待3秒,以保证两个子线程都运行完毕。
- 最后输出"Main thread exit!",表示主线程已经结束。
阅读全文