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

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.dtcms.com/a/360845.html

相关文章:

  • Socket-TCP 上位机下位机数据交互框架
  • 深入理解 HTTP 与 HTTPS:区别以及 HTTPS 加密原理
  • UART-TCP双向桥接服务
  • Flutter WebAssembly (Wasm) 支持 - 实用指南Flutter WebAssembly (Wasm) 支持 - 实用指南
  • 解决爬虫IP限制:Selenium隧道代理完整解决方案
  • 聚焦智慧教育新趋势:AI+虚拟仿真技术加速未来学习转型
  • 算法面试题(上)
  • 【Java后端】Spring Boot 全局域名替换
  • Azure AI Search构建RAG的优化点
  • 接口自动化测试之设置断言思路
  • 大模型应用开发面试实录:LLM原理、RAG工程与多Agent场景化落地解析
  • mysql实例是什么?
  • 产品月报|睿本云8月产品功能迭代
  • Topaz Video AI:AI驱动的视频增强与修复工具
  • 嵌入式实时操作系统(二十五)-实时性
  • 从 “能用” 到 “好用”:生成式 AI 落地三大核心痛点与破局路径
  • nt5inf.hash排序后前后两个共五个和nti5nf.cat文件用asn.1editor打开后导出后部分内容的对比--重要
  • Unity中多线程与高并发下的单例模式
  • 结构体成员大小及内存对齐练习
  • Electron使用WebAssembly实现CRC-16 CCITT校验
  • 9.1C++——类中特殊的成员函数
  • 安卓悬浮球-3566-测试报告
  • vue社区网格化管理系统(代码+数据库+LW)
  • Adobe Acrobat打开pdf文件时闪退如何解决?
  • OpenCV-CUDA 图像处理
  • 论文阅读_TradingAgents多智能体金融交易框架
  • .net 微服务jeager链路跟踪
  • C++11 ——— lambda表达式
  • LeetCode 19: 删除链表的倒数第 N 个结点
  • GIT(了解)