线程同步线程互斥

线程互斥
在多线程环境中运行的代码段,需要考虑是否存在竞态条件,如果存在竞态条件,我们就说该代码段不是线程安全的,不能直接运行在多线程环境当中,对于这样的代码段,我们经常称之为临界区资源,对于临界区资源,多线程环境下需要保证它以原子操作执行,要保证临界区的原子操作,就需要用到线程间的互斥操作-锁机制,thread类库还提供了更轻量级的基于CAS操作的原子操作类。

存在竞态条件的代码段(临界区代码段):代码在多线程的环境下执行,随着线程调度顺序不同,结果不同。----->原子操作

原子操作:如果该操作不能原子地执行,则要么执行完所有步骤,要么一步也不执行,不可能只执行所有步骤的一个子集。

若在多线程条件下不存在竞业条件--->可重入

线程通信

1. 条件变量+互斥锁(mutex mtx,condition_variable cond)

2. 信号量

(两个线程时序一前一后)

互斥锁和信号量区别:

互斥锁(线程同步之线程互斥),信号量(线程同步之线程通信)

类似(线程互斥)条件变量+互斥锁的实现:

信号量可以在不同线程中调用,可能线程1正在执行临界区代码段,线程二调用sem.post,线程3就可以执行临界区代码段

PV操作

P就是wait操作(sem.wait),等待资源,V就是++操作(sem.post),释放资源

1.信号量:

P就是(sem.wait),等待sem信号有资源

V就是(sem.post),增加资源以供其他执行,等待资源的线程从阻塞态变成就绪态

2.条件变量

P就是(cond.wait),等待cond信号有资源

V就是(cond.notify_all),将线程从等待状态变为阻塞态,不一定就绪,需等待解锁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值