当前位置: 首页 > news >正文

【TDengine源码阅读】举例说明pthread_once_t和PTHREAD_ONCE_INIT

2025年5月25日,周日上午


以下是一个简单的代码示例,展示如何在Linux中使用pthread_once_t和PTHREAD_ONCE_INIT来确保某个初始化函数只执行一次:

#include <stdio.h>
#include <pthread.h>// 定义once_control变量并初始化为PTHREAD_ONCE_INIT
pthread_once_t once_control = PTHREAD_ONCE_INIT;// 初始化函数,只会被执行一次
void init_function(void) {printf("初始化函数被执行,线程ID: %lu\n", pthread_self());
}// 线程函数
void* thread_func(void* arg) {printf("线程 %lu 进入\n", pthread_self());// 调用pthread_once确保init_function只执行一次pthread_once(&once_control, init_function);printf("线程 %lu 退出\n", pthread_self());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_t once_control = PTHREAD_ONCE_INIT;  

定义并初始化一个pthread_once_t类型的变量once_control,必须使用PTHREAD_ONCE_INIT宏初始化。

pthread_once(&once_control, init_function);  

调用pthread_once函数,确保init_function只会被执行一次,即使多个线程同时调用。
运行结果

两个线程都会调用pthread_once,但init_function只会被执行一次(由其中一个线程执行),其他线程会等待初始化完成。

输出示例:

线程 128707865867968 进入
线程 128707857475264 进入
初始化函数被执行,线程ID: 128707857475264
线程 128707857475264 退出
线程 128707865867968 退出

适用场景:

多线程环境下需要一次性初始化(如全局变量、单例模式、资源加载等)。

避免重复初始化导致的资源浪费或竞争条件。

相关文章:

  • PPT连同备注页(演讲者模式)一块转为PDF
  • 深入浅出IIC协议 - 从总线原理到FPGA实战开发 -- 第六篇:AXI4-Lite桥接设计
  • 鸿蒙仓颉开发语言实战教程:页面跳转和传参
  • Java多线程JUC
  • 2025.05.23 Axure 动态面板学习笔记
  • Linux 的编辑器--vim
  • Apache 高级配置实战:从连接保持到日志分析的完整指南
  • 对WireShark 中的UDP抓包数据进行解析
  • Php JIT 使用详解
  • 从智能提效到产品赋能的架构实践
  • 【HW系列】—web常规漏洞(SQL注入与XSS)
  • RocketMQ 5.0 核心概念与架构解析
  • python | vscode | 使用uv快速创建虚拟环境(实现一个项目一个虚拟环境,方便环境管理)
  • 【排序算法】典型排序算法和python 实现
  • 前端流行框架Vue3教程:28. Vue应用
  • 【排序算法】典型排序算法 Java实现
  • 基于opencv的全景图像拼接
  • CSS传统布局与定位详解与TDK三大标签SEO优化
  • Java 8 Stream操作示例
  • Redis 3.0~8.0特性与数据结构全面解析
  • 聚民网网站建设/seo推广网址
  • 河南手机网站建设公司/人工智能培训课程
  • 自己电脑做服务器搭网站/seo关键词优化排名软件
  • 大连地区网站建设/培训课程总结
  • 学做网站最好的网站/sem工作原理
  • 余姚公司做网站/2022最新新闻素材摘抄