Linux互斥锁的作用 互斥锁是什么

1、互斥锁 互斥锁(mutex),在访问共享资源之前对互斥锁进行上锁,在访问完成后释放互斥锁(解锁);对互斥锁进行上锁之后,任何其它试图再次对互斥锁进行加锁的线程都会被阻塞,直到当前线程释放互斥锁。如果释放互斥锁时有一个以上的线程阻塞,那么这些阻塞的线程会被唤醒,它们都会尝试对互斥锁进行加锁,当有一个线程成功对互斥锁上锁之后,其它线程就不能再次上锁了,只能再次陷入阻塞,等待下一次解锁。
初始化互斥锁
#include int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr); 加锁、解锁
#include int pthread_mutex_lock(pthread_mutex_t *mutex);int pthread_mutex_unlock(pthread_mutex_t *mutex); 当互斥锁已经被其它线程锁住时,调用 pthread_mutex_lock()函数会被阻塞,直到互斥锁解锁;如果线程不希望被阻塞,可以使用 pthread_mutex_trylock()函数;调用 pthread_mutex_trylock()函数尝试对互斥锁进行加锁,如果互斥锁处于未锁住状态,那么调用 pthread_mutex_trylock()将会锁住互斥锁并立马返回,如果互斥锁已经被其它线程锁住,调用 pthread_mutex_trylock()加锁失败,但不会阻塞,而是返回错误码 ebusy。
#include int pthread_mutex_trylock(pthread_mutex_t *mutex); 销毁互斥锁(不再需要互斥锁时,应该将其销毁)
#include int pthread_mutex_destroy(pthread_mutex_t *mutex); 互斥锁死锁
如果一个线程试图对同一个互斥锁加锁两次,该线程会陷入死锁状态,一直被阻塞永远出不来;这就是出现死锁的一种情况。
有时,一个线程需要同时访问两个或更多不同的共享资源,而每个资源又由不同的互斥锁管理。当超过一个线程对同一组互斥锁(两个或两个以上的互斥锁)进行加锁时,就有可能发生死锁;譬如,程序中使用一个以上的互斥锁,如果允许一个线程一直占有第一个互斥锁,并且在试图锁住第二个互斥锁时处于阻塞状态,但是拥有第二个互斥锁的线程也在试图锁住第一个互斥锁。因为两个线程都在相互请求另一个线程拥有的资源,所以这两个线程都无法向前运行,会被一直阻塞,于是就产生了死锁。

AI四小龙之间有没有竞争
预付费宿舍电能管理系统在某大学中的设计与应用
国产蓝牙耳机哪款好?超级耐用运动蓝牙耳机推荐!
整理了一份经常忽略的嵌入式基础知识点
Xilinx Ultrascale Kintex FPGA 电源解决方案
Linux互斥锁的作用 互斥锁是什么
基于单片机的红外遥控通信实验 红外遥控器的发送和接收原理
iPhoneX和小米MIX2S哪个性能最好
水位指示器电路图分享
在线烟气分析仪常见故障及其排除方法
酷芯微电子获评2023年度中国AI芯片先锋企业TOP 30
基于温度传感器和AD574转换器实现计算机瞬态记录系统的设计
计算机视觉技术商业化新走向 朝着新零售场景出发和落地
在芯片上集成温度和湿度感应
工控机产业的发展现状以及未来趋势
基于AKM Semiconductor 的音频编码器优化方案
大数据改变的五大行业
超级电容器模组的特点与优势
曝华为囤积了200万个索尼IMX989传感器 P70 Art将搭载,传感器企业灿瑞科技荣获首批上海市创新型企业总部授牌
EVM对系统性能的影响