linux线程同步

为什么需要线程同步?
为了对共享资源的访问进行保护。 大概就是为了防止一个全局变量同时被两个线程修改,发生冲突。

1.互斥锁
本质上说是一把锁,在访问共享资源之前对互斥锁进行上锁,在访问完成后释放互斥锁(解锁);对互斥锁进行上锁之后,任何其它试图再次对互斥锁进行加锁的线程都会被阻塞,直到当前线程释放互斥锁。

互斥锁死锁:一个线程试图对同一个互斥锁加锁两次,该线程会陷入死锁状态,一直被阻塞永远出不来

2.条件变量
用于自动阻塞线程,直到某个特定事件发生或某个条件满足为止,通常情况下,条件变量是和互斥锁一起搭配使用的。
主线程作为“生产者”,新创建的线程作为“消费者”
比如满足条件时,调用pthread_cond_wait:这个线程调用此函数会自动释放持有的互斥锁 mutex,并进入等待状态,进而去实现另一个线程

3.自旋锁

4.读写锁
当处于写加锁状态时,在这个锁被解锁之前,所有试图对这个锁进行加锁操作(不管是以读模式加锁还是以写模式加锁) 的线程都会被阻塞。
当处于读加锁状态时,所有试图以读模式对它进行加锁的线程都可以加锁成功。这个状态里只有对变量进行读操作,不改变变量并不会有冲突。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值