设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间08 现在时间08 缓存数据 世界上没有永恒的懦弱,也没有永恒的坚强,万事靠自己,但是一定要放下懦弱,活的有尊严,活出你的坚强,才真正的体现你的自信和力量,你的活才更有价值!

世界上没有永恒的懦弱,也没有永恒的坚强,万事靠自己,但是一定要放下懦弱,活的有尊严,活出你的坚强,才真正的体现你的自信和力量,你的活才更有价值!

查看: 804|回复: 0

C# 多线程并发编程基础小结

[复制链接]

  离线 

TA的专栏

  • 打卡等级:无名新人
  • 打卡总天数:1
  • 打卡月天数:0
  • 打卡总奖励:17
  • 最近打卡:2024-01-26 08:05:36
等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
36
主题
22
精华
0
金钱
108
积分
60
注册时间
2023-9-29
最后登录
2025-6-1

发表于 2025-6-1 05:34:22 | 显示全部楼层 |阅读模式
1. 线程基础


1.1 线程简介

C# 中的线程是操作系统能够进行运算调度的最小单位,它被包含在进程中,是进程中的实际运作单位。一个进程可以包含多个线程,这些线程可以并发执行不同的任务。

1.2 线程的创建与启动

在 C# 中,可以使用
  1. System.Threading.Thread
复制代码
类来创建和管理线程。
创建线程:
  1. Thread thread = new Thread(new ThreadStart(YourMethod));
复制代码
启动线程:
  1. thread.Start();
复制代码
1.3 线程的状态

线程在其生命周期中会经历多种状态,包括新建、就绪、运行、阻塞和死亡等。

1.4 线程的优先级

C# 中的线程具有优先级,可以通过
  1. Thread.Priority
复制代码
属性来设置。优先级高的线程更有可能获得 CPU 时间片。

2. 多线程编程基础


2.1 线程同步

多线程编程中,由于多个线程可能同时访问共享资源,因此需要考虑同步问题。C# 提供了多种同步机制。
锁(Lock):
  1. object lockObject = new object();
  2. lock (lockObject)
  3. {
  4.     // 临界区代码
  5. }
复制代码
互斥量(Mutex):
  1. Mutex mutex = new Mutex();
  2. mutex.WaitOne();
  3. // 临界区代码
  4. mutex.ReleaseMutex();
复制代码
信号量(Semaphore):
  1. Semaphore semaphore = new Semaphore(1, 1);
  2. semaphore.WaitOne();
  3. // 临界区代码
  4. semaphore.Release();
复制代码
2.2 线程间通信

线程间通信是多线程编程中的重要部分,C# 提供了多种机制来实现线程间的通信。
事件(Event):
  1. ManualResetEvent event = new ManualResetEvent(false);
  2. event.Set(); // 通知其他线程
  3. event.WaitOne(); // 等待其他线程通知
复制代码
等待句柄(WaitHandle):
  1. AutoResetEvent waitHandle = new AutoResetEvent(false);
  2. waitHandle.Set(); // 通知其他线程
  3. waitHandle.WaitOne(); // 等待其他线程通知
复制代码
2.3 线程池

线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在后台以异步方式执行任务。
使用线程池:
  1. ThreadPool.QueueUserWorkItem(new WaitCallback(YourMethod));
复制代码
2.4 异步编程

C# 提供了异步编程模型(Async/Await),可以简化异步操作的编写。
异步方法:
  1. public async Task<int> YourAsyncMethod()
  2. {
  3.     // 异步操作
  4.     var result = await SomeAsyncOperation();
  5.     return result;
  6. }
复制代码
3. 高级线程管理


3.1 并行类库(TPL)

.NET Framework 4 引入了任务并行库(Task Parallel Library, TPL),用于简化并行编程。
创建任务:
  1. Task task = new Task(YourMethod);
  2. task.Start();
复制代码
等待任务完成:
  1. Task.WaitAll(task1, task2);
复制代码
并行循环:
  1. Parallel.For(0, 100, i =>
  2. {
  3.     // 并行执行的代码
  4. });
复制代码
3.2 并行 LINQ(PLINQ)

PLINQ 是对 LINQ to Objects 的并行实现,可以显著提高数据处理的性能。
PLINQ 查询:
  1. var query = from num in numbers.AsParallel()
  2.            where num % 2 == 0
  3.            select num;
复制代码
3.3 同步上下文(SynchronizationContext)

同步上下文用于确保在正确的线程上执行回调。
获取当前同步上下文:
  1. SynchronizationContext context = SynchronizationContext.Current;
复制代码
发布到同步上下文:
  1. context.Post(state =>
  2. {
  3.     // 在正确的线程上执行的代码
  4. }, state);
复制代码
4. 线程安全集合


4.1 线程安全集合类

C# 提供了一些线程安全的集合类,可以在多线程环境下安全地使用。
线程安全字典(ConcurrentDictionary):
  1. ConcurrentDictionary<int, string> dict = new ConcurrentDictionary<int, string>();
  2. dict.TryAdd(1, "Value1");
  3. string value;
  4. dict.TryGetValue(1, out value);
复制代码
线程安全队列(ConcurrentQueue):
  1. ConcurrentQueue<int> queue = new ConcurrentQueue<int>();
  2. queue.Enqueue(1);
  3. int item;
  4. queue.TryDequeue(out item);
复制代码
4.2 不可变集合

不可变集合是一旦创建就不能修改的集合,可以安全地在多线程间共享。
创建不可变集合:
  1. ImmutableList<int> list = ImmutableList.Create(1, 2, 3);
复制代码
5. 性能监控与调试


5.1 性能监控

使用性能监控工具可以帮助诊断多线程程序中的性能瓶颈。
性能计数器:
  1. PerformanceCounter counter = new PerformanceCounter("Category", "Counter");
  2. counter.NextValue();
复制代码
5.2 调试技巧

调试多线程程序需要特殊的技巧和工具。
使用 Visual Studio 调试器:

  • 断点
  • 并行堆栈窗口
  • 并行任务窗口
日志记录:
  1. using (var writer = new StreamWriter("log.txt", true))
  2. {
  3.     writer.WriteLine("Thread {0} is executing.", Thread.CurrentThread.ManagedThreadId);
  4. }
复制代码
6. 最佳实践与常见问题


6.1 最佳实践


  • 尽量使用线程池来管理线程
  • 避免过度同步
  • 使用异步编程模型来提高响应性和性能

6.2 常见问题


  • 死锁
  • 竞态条件
  • 线程饥饿
通过遵循最佳实践和了解常见问题,可以编写出高效、稳定的多线程程序。
到此这篇关于C# 多线程并发编程基础小结的文章就介绍到这了,更多相关C# 多线程并发编程内容请搜索晓枫资讯以前的文章或继续浏览下面的相关文章希望大家以后多多支持晓枫资讯!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表