美文网首页
C# 多线程变量应用

C# 多线程变量应用

作者: ZeroingX | 来源:发表于2020-07-17 13:55 被阅读0次

多线程变量应用,主要关注两个概念【主线程变量】、【子线程变量】
(根据作用拟的名称,有些文章中用 【局部变量】、【线程变量】)

主线程变量:主要指主线程中声明的变量、参数,这些变量在子线程中引用时,它的值是不确定的。
子线程变量:主要指子线程作用域内的变量,这里子线程作用域包含了,子线程所在代码块的同一个作用域。
注:这里的解释是自己理的,不全完精确,但有用。
注:对于 子线程变量的另一个解释是:用lambda表达式传递线程参数是一个闭包操作,编译器会自动帮我们生成一个类,这个类包含了要传递的参数,用作线程启动参数。但是,如果在多个lambda表达式中使用相同的变量,它们会共享这些变量,最后导致变量值错乱。

在多线程编程中,变量的使用不合理会导致程序执行异常,比如(仅参考):


image.png

以上代码,如果在也外部是异步使用时,并发量较大的情况下会有问题

解决方案是:线程依赖的参数 全部用声明为 子线程变量
(简单讲,就是在线程代码前 再定义一个变量,线程内只使用新定义的变量)

详细的代码分析 案例
如果简单了解 只需要关注 变量i 和 变量y 的不同就可以了

image.png

另注:以上代码中 x和y 即是 子线程变量,又是 主线程变量,证明结果如:
实际执行中,x 相当于 两个变量 两个值
在主线程中 x 的值 会是 顺序的 0到9,看sx输出结果
在子线程中 x 的值 会是 乱序的 0到9,看各行的输出结果

建议的 解决方案
参考代码 1:

image.png

参考代码 2:


image.png

相关文章

  • C# 多线程变量应用

    多线程变量应用,主要关注两个概念【主线程变量】、【子线程变量】(根据作用拟的名称,有些文章中用 【局部变量】、【线...

  • C#多线程应用

    在上一个任务成功给团队demo之后,大家同意了我进一步的考虑——让下载数据这个进程可控,能够根据用户的需要关闭下载...

  • Unity C#基础之 多线程的前世今生(下) 扩展篇

    在前面两篇Unity C#基础之 多线程的前世今生(上) 科普篇和Unity C#基础之 多线程的前世今生(中) ...

  • C#语言入门详解006

    006 C#类型、变量与对象详解 目录 *什么是类型*类型在C#语言中的作用*C#语言的类型系统*变量、对象与内存...

  • C#学习笔记

    C#中的线程(一)入门 C#中的线程(二) 线程同步基础 C#中的线程(三) 使用多线程 20190130补充: ...

  • 2017年度.C#学习规划.初步

    1.目标书籍:学习完这四本C#的书之后不再购买C#开发的相关书籍 《C#多线程编程实战》, 《C#并行编程高级教程...

  • 分布式锁的实现

    前言 我们在开发应用时,如果需要对一个共享变量进行多线程同步访问的时候,我们可以使用Java多线程的各个技能点来处...

  • 浅析“分布式锁”的实现方式

    前言 我们在开发应用时,如果需要对一个共享变量进行多线程同步访问的时候,我们可以使用Java多线程的各个技能点来处...

  • Jtro的技术分享:c#中的线程互斥

    通过多线程,c#能够并行执行代码。每一个线程都有它独立的执行路径,所有的线程都能够访问共有的变量。下面的例子说明这...

  • unity3D课程内容介绍

    分为4部分内容,1基础(c#及环境搭建),2应用(IO,协程,多线程,数据结构,组件运用),3架构(面向对象,类库...

网友评论

      本文标题:C# 多线程变量应用

      本文链接:https://www.haomeiwen.com/subject/qudghktx.html