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

嵌入式开发学习———Linux环境下IO进程线程学习(六)

互斥与同步

互斥:确保多个线程或进程不会同时访问共享资源,避免数据竞争。
同步:协调线程或进程的执行顺序,确保某些操作按预期顺序发生。


互斥锁(Mutex)

用于保护共享资源,同一时间仅允许一个线程访问。

#include <pthread.h>
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;// 加锁
pthread_mutex_lock(&mutex);
// 临界区代码
pthread_mutex_unlock(&mutex);

信号量(Semaphore)

用于控制多线程/进程对资源的访问数量,支持计数。

#include <semaphore.h>
sem_t sem;
sem_init(&sem, 0, 1); // 初始值为1(二进制信号量)sem_wait(&sem); // P操作(申请资源)
// 临界区代码
sem_post(&sem); // V操作(释放资源)

条件变量(Condition Variable)

用于线程间通信,当某条件满足时唤醒等待的线程。

#include <pthread.h>
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;// 等待条件
pthread_mutex_lock(&mutex);
while (条件不满足) {pthread_cond_wait(&cond, &mutex);
}
pthread_mutex_unlock(&mutex);// 唤醒等待线程
pthread_cond_signal(&cond); // 唤醒一个线程
// 或 pthread_cond_broadcast(&cond); // 唤醒所有线程

牛客网:

http://www.lryc.cn/news/613669.html

相关文章:

  • Qwen系列模型
  • 对比学习(Contrastive Learning)面试基础
  • STM32——STM32CubeMX
  • 4G/5G无线电单元系统
  • C语言:单链表学习
  • 北京-4年功能测试2年空窗-报培训班学测开-第七十天-面试第一天
  • rebase 和pull的通俗区别是什么
  • Flink与Kafka核心源码详解-目录
  • 【Unity3D实例-功能-镜头】第三人称视觉-镜头优化
  • 秋招笔记-8.7
  • iSCSI 服务器
  • 《C语言》函数练习题--3
  • 5分钟了解OpenCV
  • 【MATLAB】(十)符号运算
  • XCZU19EG-2FFVB1517I FPGA Xilinx AMD ZynqUltraScale+ MPSoC
  • 《C语言》指针练习题--1
  • Gitee上免费搭建博客
  • 从“炼金术”到“工程学”:深度学习十年范式变迁与未来十年路线图
  • UnivNet论文分析(20210615)
  • 为何毫米波需要采用不同的DPD方法?如何量化其值?
  • 机器学习之随机森林(Random Forest)实战案例
  • OpenAI 开源模型 GPT-OSS深度拆解:从1170亿参数到单卡部署,重构AI开源生态
  • Java面试宝典:类加载
  • 敏捷总结-上
  • 智能制造的中枢神经工控机在自动化产线中的关键角色
  • C++的入门学习
  • TCP粘包问题详解与解决方案
  • 如何在 Ubuntu 24.04 中永久更改主机名
  • MySQL面试题及详细答案 155道(061-080)
  • 动手学深度学习(pytorch版):第一章节——引言