同步同一个进程中的多个线程共享所在进程的内存资源,当多个线程在同一时刻同时访问同一种共享资源时,需要相互协调,以避免出现数据的不一致和覆盖等问题,线程之间的协调和通信的就叫做线程的同步问题, 线程同步的思路: 让多个线程依次访问共享资源,而不是并行
互斥vs同步互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。如果操作是原子操作,那么天然的具有互斥同步:是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源互斥量mutex:本质上说就是一把锁,提供对资源的独占访问,所以mutex主要的作用是用于互斥。互斥量使同时只能有一个线程访问数据,可以看做一种的0/1信号量mutex对象的值只有0和1。分别代表了mutex的锁定状态和空闲状态:锁定状态:当前对象被锁定,用户进程/线程如果试图lock临界资源,则进入等待;空闲状态:当前对象为空闲,用户进程/线程可以lock临界资源,之后mutex值减1变为0。mutex被创建时可以有初始值,表示mutex被创建后,是锁定状态还是空闲状态。在同一个线程中,为了防止死锁,系统不允许连续两次对mutex加锁(系统一般会在第二次调用立刻返回)。也就是说,加锁和解锁这两个对应的操作,需要在同一个线程中完成。互斥量模型#include pthread_mutex_t mutex //定义互斥锁 pthread_mutex_init() //初始化锁 pthread_mutex_lock()/pthread_mutex_trylock() ... //加锁 pthread_mutex_unlock() //解锁 pthread_mutex_destroy() //销毁 //成功返回0,失败返回error number#include int pthread_mutex_init (pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexattr);int pthread_mutex_lock (pthread_mutex_t *mutex);int pthread_mutex_trylock (pthread_mutex_t *mutex);int pthread_mutex_unlock (pthread_mutex_t *mutex);int pthread_mutex_destroy (pthread_mutex_t *mutex);死锁deadlock死锁主要发生在有多个依赖锁存在时,会在一个线程试图与另一个线程沿着相反的顺序锁住互斥量时发生
当黑球线程按照a->的方向使用共享资源,同时白球线程按照b->a的顺序使用共享资源,不巧的是,黑球线程锁定a资源直到获得了释放了的b资源,白球线程锁定b资源直到获得了释放了的a资源,最后的结果就是他们都不能获得自己想要的资源,都锁定着对方想要的资源
解决死锁:对共享资源操作前一定要获得锁完成操作后一定要释放锁尽量短的时间占用锁如果有多锁,如获得的顺序是abc顺序,那么释放顺序也该是abc线程错误返回时会释放它所获得的锁例子#include#include#include#includechar* buf[5];int pos;//1.定义互斥量pthread_mutex_t mutex;void* task(void* pv){ //3.使用互斥量进行加锁 pthread_mutex_lock(&mutex); //4.访问共享内存 buf[pos]=(char*)pv; sleep(1); pos++; //5.使用互斥量进行解锁 pthread_mutex_unlock(&mutex);}main(){ //2.初始化互斥量 pthread_mutex_init(&mutex,null); pthread_t thread; pthread_create(&thread,null,task,(void*)zhangfei); pthread_t thread2; pthread_create(&thread2,null,task,(void*)guanyu); pthread_join(thread,null); pthread_join(thread2,null); //打印字符指针数组中的有效数据 int i=0; for(i=0;i
MOSFET芯片交期延长到3个月,市场酝酿Q4再提价格
裕太微:下游客户今明两年去库存,2025年将恢复正常
以单片机C8051F020为核心通用性强的多台电机控制平台设计
不锈钢USB连接器的好处
ST推出全球首款单片电机控制器
Linux 多线程互斥量互斥
磐石测控:深圳按键开关不灵敏是因为什么?
手机功能越来越多 你真的需要这么多功能吗?
大国重器·汽车强国—2022第三届全球新能源与智能网联汽车创新峰会暨“智途奖”颁奖盛典将于3月3日在沪开
你知道吗?屏蔽线的作用及接法
首批中国制造Model Y正式开始交付
实例监视器(数据库监视器)
深度数智:专注开发基于RISC-V芯片的创新产品
年末囤一波,双十二存储产品选购指南
华为Mate10什么时候上市?华为Mate10最新消息:华为Mate10或取消指纹识别,智能AI 芯片加持
区块链将有潜力保护和控制我们的基因数据
三星携手小米在图像传感器领域,追赶日本索尼
小米电视4X 55英寸2020版在印度上架 售价约合人民币3441元
小米100W超级快充曝光!充满电只需17分钟,OPPO 副总沈义人酸了
磷酸铁锂电池的优缺点