C# 线程浅谈(三)

2023-10-31

这篇讲线程锁 lock得概念

什么是锁 为什么用锁  

做个栗子

俩个线程同时访问一个int对象

一个线程 ++ 一个线程-- 都1W次

那么这个数 不管怎么样 最后都是0

  class TaskDom
    {
        int count = 0;
   
        public void Start()
        {
           Task t1= Task.Run(Task01);
            Task t2=Task.Run(Task02);
            t1.Wait();
            t2.Wait();
            Console.WriteLine("count: "+count);
        }
 
        private void Task02()
        {
            for (int i = 0; i < 10000; i++)
            {
               
                    count++;
               
              
            }
        }

        private void Task01()
        {
            for (int i = 0; i < 10000; i++)
            {
              
                    count--;
               
              
            }
        }
    }

但是结果是 而且每一次都不一样  这时候就需要锁LOCK来进行处理

怎么加锁那

首先加一个  object obj = new object();对象

然后在需要加锁得地方加上

lock (obj)
{
//do
};

栗子

   class TaskDom
    {
        int count = 0;
        object obj = new object();
        public void Start()
        {
           Task t1= Task.Run(Task01);
            Task t2=Task.Run(Task02);
            t1.Wait();
            t2.Wait();
            Console.WriteLine("count: "+count);
        }
 
        private void Task02()
        {
            for (int i = 0; i < 10000; i++)
            {
                lock (obj)
                {
                    count++;
                }

            }
        }

        private void Task01()
        {
            for (int i = 0; i < 10000; i++)
            {
                lock (obj)
                {
                    count--;
                }

            }
        }
    }

运行结果

OK 写完~ 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 线程浅谈(三) 的相关文章

随机推荐

  • connect和bind

    UDP 考虑以下情形 我们使用UDP写一个echo程序 客户端模型 while fget sendto recvfrom 如果服务器进程没有启动会如何 通过截包发现服务器响应一个icmp port unreachable 不过这个ICMP错
  • java: javamail 1.6.2 Create Receive Email using jdk 19

    接收邮件 中文是乱码 未解决 param pop3Host pop 163 com param storeType pop3 param user geovindu 163 com param password geovindu autho
  • 安装DevEco Studio 3.0 Beta2

    引言 鸿蒙应用程序前端 北向开发 的开发环境是华为提供的HUAWEI DevEco Studio DevEco Studio支持Windows和macOS系统 本文记录了DevEco Studio 3 0 Beta2在Windows操作系统
  • 学习笔记 JavaScript ES6 NRM源切换

    NRM npm registry manager 镜像源管理工具 两种切换方式 一 终端里输入如下命令即可切换至淘宝镜像源 mac下测试通过 npm config set registry http registry npm taobao
  • krita windows编译源码

    Qt系列文章目录 文章目录 Qt系列文章目录 前言 一 krita 二 krita源码编译 1 Windows下编译 1 编译准备 2 相关命令 使用CMake编译krita 重新编译 使用CMkae bash find package Z
  • 06C++11多线程编程之lock_guard类模板

    06C 11多线程编程之lock guard类模板 1 lock guard概念 1 lock guard是一个类模板 它是mutex的进化版 自动lock 和unlock 类似独占型智能指针unique ptr 是一个保姆 在lock g
  • QT解析XML的三种方式

    1 QT QXmlStreamReader用法小结 解析常用到的函数含义 1 导入一个xml文件或字符串的方式 方式一 QXmlStreamReader reader sXMLContent 字符串的xml 方式二 QXmlStreamRe
  • 自然连接(NATURAL JOIN)

    自然连接 NATURAL JOIN 是一种特殊的等值连接 将表中具有相同名称的列自动进行匹配 1 自然连接不必指定任何连接条件 SQL gt desc emp Name Null Type EMPNO NOT NULL NUMBER 4 E
  • 城市配电网恢复方法

    城市配电网恢复方法是指在大停电事故后 配网与主网断开连接 只能协同利用配网中的分布式电源进行恢复供电的方法 该方法需要考虑多时段 多类型负荷的恢复需求 以及电网 水网 气网的运行约束和发电资源的有限能量约束 计及关键负荷功能恢复需求的多时段
  • 【考研复习:数据结构】查找(不含代码篇)

    前言 1 此篇是基于博主对严蔚敏版教材 数据结构 王道书 数据结构 和在网上相关资料的查询 对第七章 查找 的学习总结 2 查找这一章含代码 C 会写在另一篇 写好后再放链接 3 博主比较喜欢用表格使思路稍微清晰一些 还有一些博主自己怕记乱
  • 找二叉树的中序后继

    设计一个算法 找出二叉搜索树中指定节点的 下一个 节点 也即中序后继 如果指定节点没有对应的 下一个 节点 则返回null 方法一 Definition for a binary tree node public class TreeNod
  • 基于RocketMQ分布式事务 - 完整示例

    前言 之前我们说到 分布式事务是一个复杂的技术问题 没有通用的解决方案 也缺乏简单高效的手段 不过 如果我们的系统不追求强一致性 那么最常用的还是最终一致性方案 今天 我们就基于 RocketMQ来实现消息最终一致性方案的分布式事务 本文代
  • 近期 AI 领域,招聘招生信息汇总

    关注公众号 获取更多AI领域发展机会 本文汇总近期招聘信息 有全职也有实习还有升学机会 有需要的朋友欢迎点击查看详情 投递简历 1 海内外招聘 实习生岗位 同方威视南京研发中心招聘图像算法工程师 北上深 商汤招聘智能视频和数字人算法研究员
  • 初识C语言:一篇文章解决基础的操作符(前置++与后置++的区别)

    目录 一 算术操作符 二 关系操作符 三 赋值操作符 四 自增 自减操作符 前言 总结 前言 1 加法运算符 加法运算符为双目运算符 即应有两个量参与加法运算 右结合性 2 减法运算符 减法运算符为双目运算符 但 也可作负值运算符 此时为单
  • ARM寻址方式

    所谓寻址方式就是处理器根据指令中给出的地址信息来寻找物理地址的方式 ARM处理器的寻址方式 目前ARM处理器支持9种寻址方式 分别是立即数寻址 寄存器寻址 寄存器偏移寻址 寄存器间接寻址 基址变址寻址 多寄存器寻址 相对寻址 堆栈寻址和块拷
  • 自定义规则 Collections.sort() 对 List 排序

    一 Collections sort 与Arrays sort 的比较 Collections sort 该算法是一个经过修改的合并排序算法 其中 如果低子列表中的最高元素效益高子列表中的最低元素 则忽略合并 此算法可提供保证的N log
  • 工作日记NO.12

    后续工作内容 1 尝试编译WINDOWS工程 2 尝试编译LINUX工程 3 根据LINUX工程尝试编译 编写 emscripten工程 今日完成 1 makefile规则 2 libdwg的makefile in makefile am研
  • 一些常用的第三方框架之Fresco下篇

    Fresco的使用 1 gitHub下载依赖库或者jar包 Anroid Studio可以通过compile方式加载 compile com facebook fresco fresco 0 8 1 2 添加网络权限 uses permis
  • spring cloud(四) Eureka配置Httpbasic验证+Eureka配置详解

    目录 spring cloud 一 从一个简单的springboot服务开始 spring cloud 二 起步 集成Eureka服务发现 spring cloud 三 Eureka高可用性 Feign声明式Rest客户端 spring c
  • C# 线程浅谈(三)

    这篇讲线程锁 lock得概念 什么是锁 为什么用锁 做个栗子 俩个线程同时访问一个int对象 一个线程 一个线程 都1W次 那么这个数 不管怎么样 最后都是0 class TaskDom int count 0 public void St