c#线程-线程同步

37 篇文章 4 订阅 ¥299.90 ¥399.90
本文详细介绍了C#中线程同步的各种方法,包括阻塞、加锁(lock)、Monitors、互斥锁(Mutex)、信号和句柄(AutoResetEvent、ManualResetEvent)、Interlocked以及ReaderWriterLock。线程同步的目的是防止多个线程同时访问共享数据导致数据破坏,但也可能带来性能损耗和线程排队。文中给出了各种同步方法的使用示例,帮助理解其工作原理和应用场景。
摘要由CSDN通过智能技术生成

线程同步

如果有多个线程同时访问共享数据的时候,就必须要用线程同步,防止共享数据被破坏。如果多个线程不会同时访问共享数据,可以不用线程同步。
线程同步也会有一些问题存在:
1、性能损耗。获取,释放锁,线程上下文建切换都是耗性能的。
2、同步会使线程排队等待执行。

线程同步的几种方法

阻塞

当线程调用Sleep,Join,EndInvoke,线程就处于阻塞状态(Sleep使调用线程阻塞,Join、EndInvoke使另外一个线程阻塞),会立即从cpu退出。(阻塞状态的线程不消耗cpu)
当线程在阻塞和非阻塞状态间切换时会消耗几毫秒时间。
//Join static void Main() {
Thread t = new Thread (Go);
Console.WriteLine (“Main方法已经运行…”);
t.Start();
t.Join();//阻塞Main方法 Console.WriteLine (“Main方法解除阻塞,继续运行…”);
} static void Go() {
Console.WriteLine (“在t线程上运行Go方法…”);
} //Sleep static void Main() {
Console.WriteLine (“Main方法已经运行…”);
Thread.CurrentThread.Sleep(3000);//阻塞当前线程 Console.WriteLine (“Main方法解除阻塞,继续运行…”);
} //Task static void Main() {

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苏州程序大白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值