千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > wait-free是指什么?

wait-free是指什么?

来源:千锋教育
发布人:xqq
时间: 2023-10-11 02:59:51 1696964391

一、wait-free是指什么

wait-free是指指一个线程能够在有限步内make progress。对于一个算法,Obstruction-freedom(无障碍)/Lock-freedom(无锁)/Wait-freedom(无等待),从弱到强描述了在并发环境下线程的演进保证(guarantee of progress)这个属性。换句话说,它描述了线程随着指令序列的执行取得进展(make progress)的能力。

而lock-free的意思就是:只要有task在往前走(make progress),那总有task能往前走;wait-free的意思是,只要某个task活着,不管别人在干什么,它都一定能往前走。

为什么有lock就不是lock-free了,因为只要拿到lock的那个task挂掉不动了,这个系统就完蛋了,每个task都不能再往前走了。

Lock-free和wait-free的区别在哪,在于starvation。大部分的lock-free的算法都是基于某些竞争性的原语的(primitives)。Starvation一般都是在有多个task竞争(race)的时候,也许有一个运气好的task总是在赢,那么别的task就很可怜地什么都做不了了。这不是因为没轮到他们,而只是因为他们运气坏。实际上整个系统还是在运行的,就是那个运气好的task自己一直在跑,所以这不是死锁(dead-lock)。有人把这个东西定义为live-lock,这也没法翻译了(总不能真翻成活锁吧)。

很少有天然的wait-free的算法(最天然的那个,single-reader-single-writer queue大家都知道了)。新的wait-free的算法,大都是靠胜者的施舍,也就是说有task一直赢的话,就分给输家一点,让输家能往前动一下。

延伸阅读:

二、从底层去看lock-free

lock-free是一个非常底层的东西,lock-free编程需要atomic指令这个指令是cpu提供的,cpu原生的指令有非常多都是atomic的,这些指令集分为2大类,分别是store-and-load 和read-modify-write

store-and-load

这些指令用于读,写数据到内存中,许多的cpu架构都保证这些操作是原子的,比如mov

read-modify-write

有一些操作需要多个指令比如要对内存中的一个数据进行+1,这至少需要三个原子操作指令,虽然说这3个原子操作是原子的,但是加一起就不是原子的了read-modify-write就是file the gap,在一个原子操作下去执行多个操作,比如test-and-set :将1写入到内存的地址中,然后返回旧的值,fetch-and-add:在内存中的值加上一个数字,然后返回老的值。

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT