C#多线程创建及线程的同步

需求:有时为了能分时的调用多个任务运行,因此需要考虑多线程的编程方式

操作步骤如下:

1)创建线程并开启线程

cs 复制代码
Thread thread0 = new Thread(() => DoWork0(0));
thread0.Start();

2)编写线程函数

cs 复制代码
 static void DoWork0(int threadNumber)
{

  while (true)
  {
    lock (_lock)
      {
         //停止线程
         xx
      }

     Thread.Sleep(4000); // 模拟工作
    }

    Console.WriteLine($"线程 {threadNumber} 完成工作。");
  }

3)等待线程结束

cs 复制代码
 thread0.Join();

有时可以在线程函数中编写死循环,但是需要考虑怎样退出。

当在该线程函数内执行sleep函数时,线程将会切换到下一个线程运行。

4)创建线程1

cs 复制代码
Thread thread1 = new Thread(() => DoWork1(0));
thread1.Start();

5)线程1的函数

cs 复制代码
 static void DoWork1(int threadNumber)
{

  while (true)
  {
    lock (_lock)
      {
         //停止线程
         xx
      }

     Thread.Sleep(4000); // 模拟工作
    }

    Console.WriteLine($"线程 {threadNumber} 完成工作。");
  }

为了能够终止线程运行。

可以采用共享变量控制线程的退出操作:

也即是将上述的线程函数的while(true)函数更改为:while (!_shouldStop)。

然后定义一个全局变量

cs 复制代码
pubulic static  volatile bool _shouldStop;

线程停止函数为:

cs 复制代码
public void RequestStop()
{
    _shouldStop = true;
}

为了保证线程函数运行时不会被其它线程干扰,可以加入线程锁,例如线程函数的所加的lock函数:

cs 复制代码
public static readonly object _lock = new object();
cs 复制代码
 lock (_lock)
 {
    //停止线程
         xx
}
相关推荐
Scout-leaf2 天前
WPF新手村教程(三)—— 路由事件
c#·wpf
用户298698530142 天前
程序员效率工具:Spire.Doc如何助你一键搞定Word表格排版
后端·c#·.net
mudtools3 天前
搭建一套.net下能落地的飞书考勤系统
后端·c#·.net
玩泥巴的4 天前
搭建一套.net下能落地的飞书考勤系统
c#·.net·二次开发·飞书
唐宋元明清21884 天前
.NET 本地Db数据库-技术方案选型
windows·c#
郑州光合科技余经理4 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
lindexi4 天前
dotnet DirectX 通过可等待交换链降低输入渲染延迟
c#·directx·d2d·direct2d·vortice
feifeigo1234 天前
matlab画图工具
开发语言·matlab
dustcell.4 天前
haproxy七层代理
java·开发语言·前端
norlan_jame4 天前
C-PHY与D-PHY差异
c语言·开发语言