pthread_once_t
时间: 2023-09-12 07:11:55 浏览: 238
pthread_once_t是一个线程同步的数据类型,用于保证某个函数在多线程环境下只被执行一次。它通常与pthread_once函数一起使用。
pthread_once_t是一个特殊的数据类型,用于存储pthread_once函数内部使用的状态信息。它的定义如下:
```c
typedef int pthread_once_t;
```
在使用pthread_once函数时,需要提供一个pthread_once_t变量作为参数,用于保证在多个线程中只有一个线程执行指定的初始化函数。
示例代码如下:
```c
#include <stdio.h>
#include <pthread.h>
pthread_once_t once = PTHREAD_ONCE_INIT;
void init_func()
{
printf("Initialization function is called.\n");
}
void* thread_func(void* arg)
{
pthread_once(&once, init_func);
printf("Thread is running.\n");
return NULL;
}
int main()
{
pthread_t thread1, thread2;
pthread_create(&thread1, NULL, thread_func, NULL);
pthread_create(&thread2, NULL, thread_func, NULL);
pthread_join(thread1, NULL);
pthread_join(thread2, NULL);
return 0;
}
```
在上述示例中,pthread_once函数保证了init_func函数只会被执行一次。即使有多个线程调用了pthread_once函数,只有第一个调用的线程会执行init_func函数,其他线程会等待第一个线程完成后直接返回。
阅读全文