zoukankan      html  css  js  c++  java
  • C#多线程-volatile、lock关键字

         volatile是C#中最简单的一种同步关键字,其意义是针对程序中一些敏感数据,不允许多线程同时访问,保证数据在任何访问时刻,最多有一个线程访问,以保证数据的完整性,虽与java中的synchronized 关键字有些类似相似,但是二者存在着很大的不同,最明显的地方就是volatile是修饰变量的修饰符,而synchronized是修饰一段代码或方法。

     volatile使变量保证了在内存中的共享,也就是其修饰的字段没有放在工作内存(寄存器),而是被直接放在主存操作,当一个线程修改了其修饰的变量,另一个线程可以直接读到修改后的值。

     lock确保当一个线程位于代码的临界区时,另一个线程不进入临界区。如果其他线程试图进入锁定的代码,则它就会被阻止,直到该对象被释放。也就是说在用到临界资源,确保线程可以排队进入执行临界区中的方法。

      从上我们可以看出volatile和lock的最大不同就是volatile使多个线程同时访问一个变量,每个线程的读写都是直接操作在共享内存上,从而在牺牲效率的基础上保证了变量的始终一直性,而lock大多是在牺牲效率的基础控制多个线程排队去访问一个代码块。

  • 相关阅读:
    XCTF EasyHook
    [GXYCTF2019]simple CPP
    [BJDCTF2020]ZJCTF,不过如此
    Open_basedir绕过
    P2240 【深基12.例1】部分背包问题
    PHP深浅拷贝
    关于_tostring[php]的另类利用
    通用Mapper常用方法
    @GetMapping、@PostMapping和@RequestMapping的区别
    IDEA 下载依赖包的问题
  • 原文地址:https://www.cnblogs.com/liuyuchneg-software/p/3386585.html
Copyright © 2011-2022 走看看