free技术详解 lock_lock free的理解

free技术详解 lock_lock free的理解转自:http://www.isnowfy.com/understand-to-lock-free/以前一直不明白lockfree是什么,后来发现原来是完全理解错了概念,lockfree看到大家有的翻译为无锁,有的翻译为锁无关,其实用不用锁和lockfree是不相关的,用了锁也可能是lockfree,而不用锁有可能不是lockfree。一个lockfree的解释是一个“锁无关”的程序能…

大家好,又见面了,我是你们的朋友全栈君。

转自:http://www.isnowfy.com/understand-to-lock-free/

以前一直不明白lock free是什么,后来发现原来是完全理解错了概念,lock free看到大家有的翻译为无锁,有的翻译为锁无关,其实用不用锁和lock free是不相关的,用了锁也可能是lock free,而不用锁有可能不是lock free。

一个lock free的解释是

一个“锁无关”的程序能够确保执行它的所有线程中至少有一个能够继续往下执行。

其实看我们那副图就是说你的各个线程不会互相阻塞,那么你的程序才能成为lock free的。像我们平常用的互斥锁,当有线程获得锁,其他线程就被阻塞掉了,这里的问题就是如果获得锁的线程挂掉了,而且锁也没有释放,那么整个程序其实就被block在那了,而如果程序是lock free的那么即使有线程挂掉,也不影响整个程序继续向下进行,也就是系统在整体上而言是一直前进的。

那么,不用锁就是lock free的吗,一开始就提到了,不用锁也可能不是lock free的,举个例子

while (x == 0) {

x = 1-x;

}

在这里如果两个线程同时执行,可能同时进入while循环,然后x两次改变值之后,依然是0,那么两个线程就会一直互相在这里阻塞掉了,所以这里虽然没有锁,依然不是lock free的。

现在大家写lock free的时候一般都会使用CAS(compare and set)操作来写,因为现在很多的cpu都是支持CAS操作并作为原子操作来处理的,CAS操作一般是这样的

bool compare_and_swap (int *oldval, int *dest, int newval) {

if (*oldval == *dest) {

*dest = newval;

return true;

}

return false;

}

其实这样一个操作和乐观锁很像,并且操作简单,相应的比互斥锁的代价要小。所以现在大家都是喜欢用lock free的技术来提高系统的performance。

最后如果大家对于如何编写lock free的数据结构感兴趣的话,可以参考我后面给出的链接。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/161680.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • JSP实用教程(基础入门教程)

    一、JSP技术概述  在Sun正式发布JSP(JavaServerPages)之后,这种新的Web应用开发技术很快引起了人们的关注。JSP为创建高度动态的Web应用提供了一个独特的开发环境。按照Sun的说法,JSP能够适应市场上包括ApacheWebServer、IIS4.0在内的85%的服务器产品。即使您对ASP”一往情深”,我们认为,关注

    2022年4月17日
    138
  • 时间复杂度和空间复杂度 如何计算出来_代码时间复杂度和空间复杂度

    时间复杂度和空间复杂度 如何计算出来_代码时间复杂度和空间复杂度时间复杂度和空间复杂度如何计算?推导算法:大O推导法时间复杂度定义常数阶线性阶对数阶平方阶小结空间复杂度定义推导算法:大O推导法1、用常数1取代运行时间中的所有加法常数2、在修改后的运行次数函数中,只保留最高阶项3、如果最高阶项存在且不是1,那么我们就去除于这个项相乘的常数。时间复杂度定义在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变…

    2025年7月7日
    2
  • Office2007版本详情

    Office2007版本详情1、各版本功能对比2、各版本下载地址2.1MicrosoftOfficeStandard2007MSDN中文标准版下载和激活2.1.1下载下载地址ed2k://|file|zh-hans_office_standard_2007_x86_cd_x12-18931.iso|528621568|8BC9FD5DB21A3A93E10EF151BE6EF229|/文件名zh-hans_office_standard_2007_x86_cd_x12-18931.i…

    2022年7月19日
    31
  • String转JsonArray转List[通俗易懂]

    String转JsonArray转List[通俗易懂]场景是查看学生详情时需要展示学生学历信息比如某某年哪个学校毕业奖惩情况等等privateModelAndViewshowDetails(Stringid){//…省略业务代码ModelAndViewmodel=newModelAndView(“你的页面地址”);//源Stringmpp=”{\”start…

    2022年6月20日
    63
  • ibatis isnotequal_英语中is和are的用法

    ibatis isnotequal_英语中is和are的用法一:isEquals用于动态拼接sql如下实例:如果status的状态为0,则更新attribute1;状态为1,则更新attribute2;状态为2,则更新attribute3。<updateid="topup.doEffect"parameterClass="java.util.HashMap">updatecis_customersetcode_id=…

    2022年9月28日
    2
  • js估算一篇文章的阅读时长

    js估算一篇文章的阅读时长

    2021年6月6日
    97

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号