首页 > 编程语言 >C# 多线程

C# 多线程

时间:2024-02-18 19:55:27浏览次数:28  
标签:执行 Thread C# lock 线程 前台 多线程

什么是线程

线程是操作系统中能够独立运行的最小单位,也是程序中能够并发执行的一段指令序列。
线程是进程的一部分,一个进程可以包含多个线程,这些线程共享进程的资源。
进程有入口线程,也可以创建更多的线程。

为什么要多线程

  1. 批量重复任务希望同时进行
  2. 多个不同任务希望同时进行

线程安全

多个线程访问共享资源时,对共享资源的访问不会导致数据不一致或不可预期的结果

同步机制

用于协调和控制多个线程之间执行顺序和互斥访问共享资源。
确保线程按照特定的顺序执行,避免竟态条件和数据不一致的问题。
可以使用lock()

原子操作

在执行过程中不会被中断的操作。不可分割,要么完全执行,要么完全不执行,没有中间状态。
使用Interlocked.Increment(ref count);实现增加操作

后台线程

当通过前台线程创建了后台线程,前台线程结束了,后台线程也会跟着结束。
而如果通过前台线程创建了前台线程,那即便前台线程结束了,创建的前台线程也不会结束。

线程的终止 Thread

  1. 推荐使用Thread.Interrupt或者CancellationTokenThread.Interrupt会抛出一个ThreadInterruptedException异常,直接用try catch来捕获该异常就好。但是如果线程太忙了,没有空闲处理来抛出异常的话,也是无法终止的。
  2. 调用Thread.Join方法等待线程结束,但是主线程会被阻塞,直到子线程结束
  3. 不能使用Abort方法!已经被遗弃了

线程安全与同步机制-锁与信号量

  • lock & Monitor, lock就是锁,底层是Monitor
  • Mutex,互斥锁,可以进程间共享
  • Semaphore,旗语,用于线程间的一个同步
  • WaitHandle
  • ReaderWriterLock

不要自己造轮子,dotnet提供了很多线程安全的操作

  1. 线程安全的单例:Lazy
  2. 线程安全的集合类型:ConcurrentBag/ConcurrentStack/ConcurrentQueue/ConcurrentDictionary
  3. 阻塞集合:BlockingCollection
  4. 通道:Channel
  5. 原子操作:Interlocked
  6. 周期任务:PeriodicTimer

标签:执行,Thread,C#,lock,线程,前台,多线程
From: https://www.cnblogs.com/xavierxiu/p/18018584

相关文章

  • [2024 AtCoder 比赛历程]
    2024.1.20ABC337-G题目大意:给定一棵树,对于树上的每个点$u$,定义$f[u]$表示满足点$w$在点$u$到点$v$的路径中,且$w>v$的点对$(w,v)$的数量。$u$可以等于$w$。解法:比赛时先考虑将一个点钦定为$w$时,该点对其他点的贡献。发现对于一个点,它可以通过它的一个子树内......
  • Mac解压rar压缩包
    rarosx下载rarosx-5.6.0.tar.gzhttps://link.zhihu.com/?target=https%3A//www.rarlab.com/rar/rarosx-5.6.0.tar.gz双击解压并cd到目录安装rar和unrar命令一个是安装rar压缩命令,一个是安装unrar解压命令。sudoinstall-c-o$USERrar/usr/local/bin/sudoinstall-c-......
  • docker中如何修改容器的时间
    使用方法首先,使用dockerps命令查找正在运行的容器的ID或名称。例如,假设容器名称是mytongweb使用以下命令进入容器的shell环境dockerexec-itmytongweb/bin/bash#这将进入容器的bashshell在容器的shell中,使用date命令来设置日期和时间,与在 Linux 中操作一样。使用以......
  • ARC 170_A
    AT_arc170_a[ARC170A]YetAnotherABProblem题解这道题做了我七天(同时也是我第一到通过的ARC题)太酷了其实还是比较好理解的原题题干原题题干(洛谷)输出\(-1\)的情况:在第一个更换的\(B~A\)(即\(S_i\)位)之前有\(A~B\)(即\(S_j\)位)的更换在最后更换的\(A~......
  • 跨界协作:借助gRPC实现Python数据分析能力的共享
    gRPC是一个高性能、开源、通用的远程过程调用(RPC)框架,由Google推出。它基于HTTP/2协议标准设计开发,默认采用ProtocolBuffers数据序列化协议,支持多种开发语言。在gRPC中,客户端可以像调用本地对象一样直接调用另一台不同的机器上服务端应用的方法,使得您能够更容易地创建分布式应用......
  • KY22 最大序列和C
    题目例子给的很好,还有不要遗漏全是负数的情况。#include<stdio.h>#include<math.h>intmain(){longlongn=0;while(scanf("%ld",&n)!=EOF){longlongsum=0;longlongmax=0;inttag=0;longlongmaxn=pow(-2,63);......
  • WxTCmd.exe
    WxTCmd.exe是一个用于解析Windows10(及以上版本)的Timeline和活动历史(包括ActivitiesCache.db文件)的命令行工具。 这个工具专门设计用来处理和分析WindowsTimeline功能收集的数据,Timeline功能记录了用户在多个设备上的活动,如应用使用情况、网站访问记录等,以便用户能......
  • Porsche Piwis 3 Tester III V43.300.22 + V38.250 Diagnostic Tool Support Diagnosi
    Greatnews!ThePorschePiwis3TesterIIIV43.300.22+V38.250DiagnosticToolhasjustbeenupdatedwithnewsoftwareversions.ThislatestversioncoversalloldandnewPorschecarsupto2024,makingitacomprehensivediagnostictoolforprofessiona......
  • PECmd.exe
    PECmd.exe是一个用于分析WindowsPrefetch文件的工具,这些文件包含了有关程序启动时间和频率的信息,可以帮助用户了解哪些程序被执行过以及它们的执行细节。Prefetch文件是Windows操作系统用来提高特定程序启动速度的一部分。通过分析这些文件,PECmd.exe提供了深入的......
  • IfcConnectionTypeEnum
    IfcConnectionTypeEnum类型定义该枚举定义了基于路径的元素(如IfcWallStandardCase)连接的不同方式,如图179所示。 IFC2.0中的新型 EnumerationdefinitionConstantDescriptionATPATHConnectionalongthepathoftheconnectedelement.ATSTARTConnectionatthe......