lock-free和lock的一些本质区别

lock的本质就是你得到锁,完成你的工作,然后你知道在这种状态下没有人可以打扰你,最后你释放了锁


lock-free的本质是你在其他地方安心的做你的事情,当你做完之后,你原子级别的提交这段共走量到可见区,如果失败你会不断的重复去尝试。实现的本质是基于处理器的CAS(事务内存 std::atomic::compare_exchange_weak())或者是atomic increment(事务内存). data type还能拥有对应的lock-free属性,所谓lock-free属性也能被叫为stateless, 这个属性暗示着对应的object不会存在中间状态,如果他被中断或者被其他线程在中间状态进行读取,都是保证安全的


相关lock-free的一些思考有:


两者还有一个比较的区别就是一个lock的program当一个线程拿到lock之后可以直接把整个程序都给block, 但是lock-free的程序即使在线程被suspended的情况下,仍然可以运行(通过不断的retry commmit机制),比如下面的两端代码



一种是lock的版本,一种是lock-free的版本,假设我们有100多个线程同时运行,在lock的版本中,线程的运行依赖其他线程的lock的释放。但是对于Lock-free的版本,所有的线程都可以同步开展,如果一个线程被拦截,只有这个线程的成果不会被共享,但是其他线程仍然可以运行


PS:

展开阅读全文

页面更新:2024-04-16

标签:本质   线程   原子   算法   属性   区别   级别   内存   状态   竞争   版本

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top