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

【Linux】线程控制

多个线程访问临界资源时,存在资源竞争,造成数据错乱.

临界资源(全局变量共享内存):多个线程可以同时操作的资源空间.

解决办法:多个线程访问临界资源时,进行排他性访问(同一时刻只允许一个线程对该临界资源进行访问)

一、互斥锁

解决多线程访问临界资源时,存在资源竞争

互斥锁使用流程:

1.创建互斥锁

2.初始化互斥锁

int pthread_mutex_init(pthread_mutex_t *restrict mutex,const pthread_mutexattr_t *restrict attr);
/******
功能:初始化一个互斥锁
参数:restrict mutex:锁对象地址restrict attr:锁的属性(NULL)
return:成功0失败非0******/

3.加锁

int pthread_mutex_lock(pthread_mutex_t *mutex);

4.解锁

int pthread_mutex_unlock(pthread_mutex_t *mutex);

5.销毁锁

int pthread_mutex_destroy(pthread_mutex_t *mutex);


异步:多任务各自执行各自的任务,互相之间没有直接干扰

同步:多个任务中的某些任务按照先后顺序执行

线程间同步:多个线程在某个任务执行过程中具有先后顺序

二、信号量sem

实现线程间同步(使用同步资源访问临界资源,可以达到互斥的效果)

信号量使用:

1.定义信号量对象

sem_t sem;

2.初始化信号量

#include <semaphore.h>
int sem_init(sem_t *sem, int pshared, unsigned int value);/*****
功能:初始化信号量
参数:sem:信号量对象地址pshared:    0线程间使用非0进程间使用value:初始化的资源数
返回值:成功0失败-1
*****/

3.申请信号量:P操作

int sem_wait(sem_t *sem);
/*
当申请的信号量资源数>0,sem_wait解除阻塞,表示申请到了该信号量,信号量资源数-1
当申请的信号量资源数=0,sem_wait阻塞等待信号量的释放
*/

4.释放信号量:V操作

int sem_post(sem_t *sem);
/*
该信号量的资源数自动+1
**/

5.销毁信号量

int sem_destroy(sem_t *sem);

http://www.xdnf.cn/news/3615.html

相关文章:

  • 【PINN】DeepXDE学习训练营(12)——operator-antiderivative_aligned_pideeponet.py
  • 0902Redux_状态管理-react-仿低代码平台项目
  • Go小技巧易错点100例(二十八)
  • LeetCode240. 搜索二维矩阵 II(巧妙转换)
  • 【AI论文】DeepCritic:使用大型语言模型进行有意识的批判
  • Vscode+git笔记
  • 【Bootstrap V4系列】学习入门教程之 组件-徽章(Badge)和面包屑导航(Breadcrumb)
  • 【Java Lambda表达式详解】
  • 学习黑客色即是空
  • 第3章 Python 3 基础语法001
  • 海外新版本开发高端Apple/科技汽车/共享投资理财平台系统
  • 【Python实战】飞机大战
  • DeepSeek辅助学术写作之提交和出版以及评审过程分析提示词分享祝你顺利毕业~
  • 创建第一个简单cesium程序
  • LeetCode - 19.删除链表的倒数第N个结点
  • 探索 C++23 std::to_underlying:枚举底层值获取的利器
  • 单片机嵌入式字符流数据解析库
  • YOLOv11改进:利用RT-DETR主干网络PPHGNetV2助力轻量化目标检测
  • AVFormatContext 再分析二
  • (即插即用模块-Attention部分) 六十三、(2024 CVPR) MLKA 多尺度大核注意力
  • 计算机视觉与深度学习 | 什么是图像金字塔?
  • 如何用CSS实现HTML元素的旋转效果:从基础到高阶应用
  • SQL ROUND() 函数详解
  • MySQL基础关键_006_DQL(五)
  • 数智图书馆的信息组织革命:AI变革下的新秩序
  • Spring 事务的底层原理常见陷阱
  • Fabrice Bellard(个人网站:‌bellard.org‌)介绍
  • ad 多通道设计中出现的相关问题
  • AWS上构建基于自然语言和LINDO API的线性规划与非线性规划的优化计算系统
  • MCP 探索:MCP 集成的相关网站 Smithery、PulseMCP 等