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

linux互斥锁:递归锁,非递归锁用法详解

        在实际的项目中经常涉及到共享资源,共享资源被多个线程访问会出现竞争现象;为了解决竞争和保护共享资源常用的机制之一就是互斥锁!

        互斥锁又分为递归锁和非递归锁,互斥锁默认是非递归锁,也是我们常用的上锁方式。那么什么是递归锁和非递归锁呢?

非递归锁(Non-recursive Lock)

        使用方式:非递归锁每次只能被同一个线程加锁一次,若再次尝试加锁会导致死锁。所以在使用非递归锁时,应确保同一个线程不会重复加锁。

        返回值:非递归锁的锁操作函数pthread_mutex_lock和pthread_mutex_trylock返回0表示加锁成功,非0则表示加锁失败。

示例代码:

pthread_mutex_t mutex;void* func(void){pthread_mutex_lock(&mutex);
//        pthread_mutex_lock(&mutex);//上锁之后再申请锁,这样会造成死锁std::cout<<"thread : "<<pthread_self()<<" going to get lock 2st"<<std::endl;
//        pthread_mutex_unlock(&mutex);pthread_mutex_unlock(&mutex);return NULL;
}int main(void)
{int ret = 0;pthread_t p;pthread_mutex_init(&mutex, NULL);//初始化互斥锁if((ret =
http://www.lryc.cn/news/293658.html

相关文章:

  • MacOS安装dmg提示已文件已损坏的解决方法
  • 前端输入框简单实现检测@成员输入
  • 通过与chatGPT交流实现零样本事件抽取
  • 使用nodejs和html布局一个简单的视频播放网站,但是使用localhost:端口访问html无法加载视频
  • 【AG32VF407】国产MCU+FPGA Verilog双边沿检测输出方波
  • [晓理紫]每日论文分享(有中文摘要,源码或项目地址)--强化学习、模仿学习、机器人
  • 为什么说TiDB在线扩容对业务几乎没有影响
  • STM32--SPI通信协议(2)W25Q64简介
  • svn安装与搭建
  • 什么是缓存击穿、缓存穿透、缓存雪崩?
  • springboot153相亲网站
  • CMake生成osg的FFMPEG插件及Windows下不生成VS工程问题解决
  • 代码随想录算法训练营Day25 | 216.组合总和III、17.电话号码的字母组合
  • 故障诊断 | 一文解决,SVM支持向量机的故障诊断(Matlab)
  • 12.1 Web开发_DOMBOM:JS关联CSS(❤❤)
  • scoped样式隔离原理
  • 降价不是杀手锏,和府捞面打起“养生牌”
  • 在WORD中设置公式居中编号右对齐设置方式
  • 如何使用 Supabase Auth 在您的应用程序中设置身份验证
  • 带libc源码gdb动态调试(导入glibc库使得可执行文件动态调试时可看见调用库函数源码)
  • 初级通信工程师-通信动力与环境
  • clickhouse在MES中的应用-跟踪扫描
  • 适用于嵌入式单片机的压缩算法
  • 软件工程(最简式总结)
  • Docker基础(持续更新中)
  • Vue工程引入Element-ui
  • 算法学习——华为机考题库9(HJ56 - HJ63)
  • Maven安装,学习笔记,详细整理maven的一些配置
  • STM32--USART串口(2)串口外设
  • Unity之做一个最简单的FPS游戏demo