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

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

操作步骤如下:

1)创建线程并开启线程

Thread thread0 = new Thread(() => DoWork0(0));
thread0.Start();

2)编写线程函数 

 static void DoWork0(int threadNumber)
{while (true){lock (_lock){//停止线程xx}Thread.Sleep(4000); // 模拟工作}Console.WriteLine($"线程 {threadNumber} 完成工作。");}

 3)等待线程结束

 thread0.Join();

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

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

4)创建线程1

Thread thread1 = new Thread(() => DoWork1(0));
thread1.Start();

5)线程1的函数

 static void DoWork1(int threadNumber)
{while (true){lock (_lock){//停止线程xx}Thread.Sleep(4000); // 模拟工作}Console.WriteLine($"线程 {threadNumber} 完成工作。");}

为了能够终止线程运行。

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

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

然后定义一个全局变量

pubulic static  volatile bool _shouldStop;

 线程停止函数为:

public void RequestStop()
{_shouldStop = true;
}

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

public static readonly object _lock = new object();
 lock (_lock){//停止线程xx
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/180526.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

“目标函数“(Objective Function)和“损失函数“(Loss Function)有什么区别

"目标函数"(Objective Function)和"损失函数"(Loss Function)通常在机器学习和优化问题中使用,它们在某些上下文中可以是相同的,但也有一些区别。 目标函数(Objective Func…

漏洞扫描-德迅云安全漏洞扫描服务

漏洞扫描是指基于漏洞数据库,通过扫描等手段对指定的远程或者本地计算机系统的安全脆弱性进行检测,发现可利用漏洞的一种安全检测的行为。 漏洞扫描的主要目的是发现系统、网络或应用程序中可能存在的安全漏洞和缺陷,以便及时修复这些漏洞和缺…

python实验3 石头剪刀布游戏

实验3:石头剪刀布游戏 一、实验目的二、知识要点图三、实验1. 石头剪刀布2. 实现大侠个人信息 一、实验目的 了解3类基本组合数据类型。理解列表概念并掌握Python中列表的使用。理解字典概念并掌握Python中字典的使用。运用jieba库进行中文分词并进行文本词频统计。…

C/C++ 发送与接收HTTP/S请求

HTTP(Hypertext Transfer Protocol)是一种用于传输超文本的协议。它是一种无状态的、应用层的协议,用于在计算机之间传输超文本文档,通常在 Web 浏览器和 Web 服务器之间进行数据通信。HTTP 是由互联网工程任务组(IETF…

上海亚商投顾:沪指震荡反弹 汽车产业链掀涨停潮

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 三大指数昨日震荡反弹,北证50指数跌超4%,近50只北交所个股跌超10%。 新能源车产业链掀…

深度学习点云质量增强方法综述

好久没更新博客了,后面计划重启博客,空闲时分享一下学习心得,包括但不局限于点云编码/压缩、插帧、质量增强。这次,推荐一篇综述论文。 期刊:《中国图象图形学报》2023年第28卷第11期 作者:陈建文1, 赵丽丽…

JSONP解决跨域问题

前言 本文主要讲解跨域问题以及解决跨域问题的方案之一JSONP的实现方式。 什么是跨域 全称为Cross-Origin Resource Sharing,简单来说请求的客户端和服务端的端口、域名、协议中的任意一个有不一样的地方在URL的展示中,那么就会出现这个跨域问题。 它产生的原因…

不同路径 II(力扣LeetCode)动态规划

不同路径 II 题目描述 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。 现在考虑网格中有障碍物。…

Vue3自定义指令(directive)

Vue2自定义指令(directive) Vue3自定义指令(directive)

【Android Jetpack】Hilt 依赖注入框架

文章目录 依赖注入DaggerHiltKoin添加依赖项Hilt常用注解的含义HiltAndroidAppAndroidEntryPointInjectModuleInstallInProvidesEntryPoint Hilt组件生命周期和作用域如何使用 Hilt 进行依赖注入 依赖注入 依赖注入是一种软件设计模式,它允许客户端从外部源获取其依…

智能井盖传感器怎么监测井盖倾斜?

城市道路上的井盖是常见的安全隐患,由于井盖质量不过关、安装不合理等原因导致的井盖位移或倾斜等事故,每年都处于不断增加的状态。为了减少此类案件的发生并维护社会治安,国家相关部门已经制定了多项政策法规对井盖进行统一监管。鼓励各个城…

有哪些不错的golang开源项目?

前言 下面是github上的golang项目,适合练手,可以自己选择一些项目去练习,整理不易,希望能多多点赞收藏一下!废话少说,我们直接进入正题>>> 先推荐几个教程性质的项目(用于新手学习、…

C Primer Plus讲解前置说明

说明 本来是准备接着写下去,写着就发现思路整理的有点杂乱无章。果然是“想一千次,不如去做一次”。所以这次准备基于《C Primer Plus》第六版给大家分享一下,也是自己梳理的一个过程。有关C语言的书很多,我选这本也恰巧是因为以前…

Django二转Day02

http #1 http 是什么#2 http特点#3 请求协议详情 -请求首行---》请求方式,请求地址,请求协议版本 -请求头---》key:value形式 -referer:上一次访问的地址 -user-agenet:客户端类型 -name&#x…

面试题:汉诺塔问题 · 递归

你好,我是安然无虞。 文章目录 汉诺塔问题问题描述解题思路代码详解 汉诺塔问题 问题描述 解题思路 这道题的名字还是很响的,基本上都能看出来使用递归解题,但是具体怎么实现还是需要细细想一想。 我们一步一步来,请看&#xff…

2023-11-28 LeetCode每日一题(设计前中后队列)

2023-11-28每日一题 一、题目编号 1760.设计前中后队列二、题目链接 点击跳转到题目位置 三、题目描述 请你设计一个队列,支持在前,中,后三个位置的 push 和 pop 操作。 请你完成 FrontMiddleBack 类: FrontMiddleBack() 初…

Java中的Lambda表达式和相关函数式接口

知识模块: 一.Lambda表达式概述: 二.Lambda表达式使用前提 三.Lambda表达式一.完整格式二.简略格式 四.Lanbda表达式原理 五.Java中已有的函数式接口a.Supplierb.Consumer接口c.Functiond.Predicate一.Lambda表达式概述:面向对象编程思想关注…

微服务实战系列之Cache

前言 欢迎来到Cache(缓存)的世界! 自从世界第一台计算机诞生之日起,人们对效率的渴望逐步增强。从CPU到存储,从芯片到内存,一批又一批的先驱以一种孜孜不倦的“工匠”精神,为计算机运行效率的提…

揭开 BFC 的神秘面纱:前端开发必知必会

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

用Sublime编写Lua脚本

大家好,我是阿赵。   现在很多手游项目使用lua作为热更新的代码脚本,我一直很喜欢用Sublime来写lua程序。喜欢使用它的原因是它的轻量化,因为我经常要同时打开多个项目,Unity和VisualStudio这些软件都比较占用电脑的性能&#x…