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
}
相关推荐
软件黑马王子3 小时前
C#初级教程(4)——流程控制:从基础到实践
开发语言·c#
闲猫3 小时前
go orm GORM
开发语言·后端·golang
李白同学5 小时前
【C语言】结构体内存对齐问题
c语言·开发语言
黑子哥呢?6 小时前
安装Bash completion解决tab不能补全问题
开发语言·bash
青龙小码农6 小时前
yum报错:bash: /usr/bin/yum: /usr/bin/python: 坏的解释器:没有那个文件或目录
开发语言·python·bash·liunx
大数据追光猿6 小时前
Python应用算法之贪心算法理解和实践
大数据·开发语言·人工智能·python·深度学习·算法·贪心算法
彳卸风7 小时前
Unable to parse timestamp value: “20250220135445“, expected format is
开发语言
dorabighead7 小时前
JavaScript 高级程序设计 读书笔记(第三章)
开发语言·javascript·ecmascript
风与沙的较量丶8 小时前
Java中的局部变量和成员变量在内存中的位置
java·开发语言
水煮庄周鱼鱼8 小时前
C# 入门简介
开发语言·c#