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

20250828的学习笔记

一、互斥锁

1、定义互斥锁

pthread_mutex_t mutex;

2、初始化锁

int pthread_mutex_init(pthread_mutex_t *mutex,const pthread_mutexattr_t *attr);

功能:

        将已经定义好的互斥锁初始化。

参数:

        mutex要初始化的互斥锁

        atr 初始化的值,一般是NULL表示默认锁

返回值:

        成功        0

        失败        非0

3、加锁

Int pthread_mutex_lock(pthread_mutex_t *mutex);

功能:

        用指定的互斥锁开始加锁代码,加锁后的代码到解锁部分的代码属于原子操作,在加锁期间其他进程/线程都不能操作该部分代码,如果该函数在执行的时候,mutex已经被其他部分使用则代码阻塞。

参数:

        mutex用来给代码加锁的互斥锁

返回值:

        成功        0

        失败        非0

4、解锁

int pthread_mutex_unlock(pthread_mutex_t *mutex);

功能:

        将指定的互斥锁解锁。

参数:

        用来解锁的互斥锁

返回值:

        成功        0

        失败        非零

5、销毁

int pthread_mutex_destroy(pthread_mutex_t *mutex);

功能:

        使用互斥锁完毕后需要销毁互斥锁

参数:

        mutex要销毁的互斥锁

返回值:

        成功        0

        失败        非0

6、trylock

int pthread_mutex_trylock(pthread_mutex_t *mutex);

功能:

        类似加锁函数效果,唯一区别就是不阻塞。

参数:

        mutex用来加锁的互斥锁

返回值:

        成功        0

        失败        非零

二、信号量

1、信号量的分类

        1、无名信号量 ==》线程间通信

        2、有名信号量 ==》进程间通信

2、信号量的定义

        sem_t        sem;

3、信号量的初始化

int sem_init(sem_t *sem, int pshared, unsigned int value);

功能:

        将已经定义好的信号量赋值。

参数:

        sem 要初始化的信号量。

        pshared =0;表示线程间使用信号量。

        pshared!=0;表示进程间使用信号量。

        value 信号量的初始值,一般无名信号量都是二值信号量0和1。

               0 表示红灯,进程暂停阻塞。

                1表示绿灯,进程可以通过执行。

返回值:

        成功        0

        失败        -1

4、信号量的PV操作

        P ===》申请资源===》申请一个二值信号量

        V ===》释放资源===》释放一个二值信号量

        P操作对应函数 ==》sem_waitO;

        V操作对应函数 ==》sem_postO;

int sem_wait(sem_t *sem);

功能:

        判断当前sem信号量是否有资源可用。如果sem有资源(==1),则申请该资源,程序继续运行。如果sem没有资源(==0),则线程阻塞等待。一旦有资源,则自动申请资源并继续运行程序。

注意:sem 申请资源后会自动执行 sem = sem - 1;

参数:

        sem 要判断的信号量资源。

返回值:

        成功        0

        失败        -1

int sem_post(sem_t *sem);

功能:

        函数可以将指定的sem信号量资源释放,并默认执行,sem = sem+1;线程在该函数上不会阻塞。

参数:

        sem 要释放资源的信号量。

返回值:

        成功        0

        失败        -1

5、信号量的销毁

int sem_destroy(sem_t *sem);

功能:

        使用完毕将指定的信号量销毁。

参数:

        sem要销毁的信号量。

返回值:

        成功        0

        失败        -1

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

相关文章:

  • 9.1日IO作业
  • 2025年09月01日Github流行趋势
  • 99、23种设计模式之组合模式(8/23)
  • 09.《路由基础知识解析和实践》
  • 基于外部对照数据借用的临床试验统计分析方案设计与仿真研究
  • PitVis-2023挑战赛:内镜下垂体瘤手术视频中的手术流程识别|文献速递-深度学习人工智能医疗图像
  • 如何把指定阿里云文件夹下的所有文件移动到另一个文件夹下,移动文件时把文件名称(不包括文件后缀)进行md5编码
  • 从理论到实践,深入剖析数据库水平拆分的安全平滑落地
  • Spark自定义累加器实现高效WordCount
  • Spark和Spring整合处理离线数据
  • promptoMANIA-AI绘画提示词生成器
  • Electron使用WebAssembly实现CRC-16 CCITT校验
  • macOS中Homebrew安装PHP的详细步骤(五)
  • 深入了解Flink核心:Slot资源管理机制
  • PostgreSQL 索引大全
  • 深入理解Docker容器技术:原理与实践
  • 如何安装CUDA????
  • three.js+WebGL踩坑经验合集(10.1):镜像问题又一坑——THREE.InstancedMesh的正反面显示问题
  • 机器学习-时序预测2
  • 基于FPGA+DSP数据采集处理平台的搭建
  • 【Vue2 ✨】Vue2 入门之旅(四):生命周期钩子
  • Unity核心概念③:Inspector窗口可编辑变量
  • C++/QT day3(9.1)
  • 深度学习中常用的激活函数
  • 关系型数据库——GaussDB的简单学习
  • Spring Boot 和 Spring Cloud 的原理和区别
  • 对于牛客网—语言学习篇—编程初学者入门训练—复合类型:BC141 井字棋及BC142 扫雷题目的解析
  • Composefile配置
  • 瑞芯微RK3576平台FFmpeg硬件编解码移植及性能测试实战攻略
  • 查看LoRA 哪个适配器处于激活状态(67)