#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 11:22:43 浏览: 90
linux多线程编程测试例子
这是一个使用 pthread_once 函数保证线程只执行一次的 C 语言程序。在程序中定义了一个全局的 pthread_once_t 类型的变量 once 并初始化为 PTHREAD_ONCE_INIT,表示该变量只初始化一次。定义了一个函数 run,该函数将打印出当前线程的 ID。在函数 thread1 和 thread2 中,先打印出当前线程的 ID,然后调用 pthread_once 函数,传递了 once 变量和 run 函数作为参数,保证 run 函数只会被执行一次。最后,主函数中创建了两个线程 thid1 和 thid2,分别执行 thread1 和 thread2 函数,然后等待 3 秒,打印出 "Main thread exit!" 表示主线程结束。由于 pthread_once 函数的作用,run 函数只会被执行一次,并且是在其中一个线程中执行的。因此,程序的输出结果可能不确定,但是一定会打印出 "Main thread exit!"。
阅读全文