C#编程-在线程中使用同步

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在线程中使用同步

在线程应用程序中,线程需要相互共享数据。但是,应用程序应该确保一个线程不更改另一个线程使用的数据。考虑有两个线程的场景。一个线程从文件读取工资,另一个线程尝试更新工资。当两个线程同时工作时,数据就会受损。下图显示了两个线程同时访问一个文件的数据。
在这里插入图片描述


同步线程

线程的同步确保如果两个或多个线程需要访问共享资源,那么那个资源一次仅被一个线程使用。您可以使用synchroized关键字同步代码。可以在任何给定的时间仅调用一个同步方法。

同步基于监视的概念。监视器时一个对象, 用于数据成员的锁以及类的方法。所有对象和类都与监视器关联,并且在指定时间只有一个线程能够拥有监视器。要进入一个对象的监视器,需要调用synchroized关键字修改的方法。

监视器控制同步方法访问一个对象或类的方法。当线程获取锁时,就是说它进入了监视器。监视器确保在任何给定的时间仅一个线程访问资源。

当线程在同步方法内的时候,所有试图在同一个实例上调用方法的其他线程必须等待。在同步方法执行的期间,对象时被锁定的以便没有其他的同步方法被调用。当方法完成其执行时会自动释放监视器。监视器也在同步方法执行Wait()方法的时候被释放。下图显示了线程同步的一个示例。
在这里插入图片描述

在上图中,Thread1正在更新文件中Stella的工资时,在Salary.xls文件上有一个锁。Thread2要从Salary.xls文件读取Stella的工资,它正在等待Thread1释放文件上的锁。

当线程调用Wait()方法时,它暂时释放它拥有的锁。而且,线程停止运行,而且被加入到那个对象的等待线程列表中。

下图显示了线程间的同步。
在这里插入图片描述

使用监视锁锁定代码
System.Monitor类能够以锁和信号的方式使代码块的访问序列化。例如,您有一个将内容写到文件的方法。此方法不应由两个或多个线程同时使用来讲内容写到文件。您可以使用Monitor类来锁定方法,以便在给定时间仅有一个线程能执行它。

考虑同步的示例。有两个进程,两个进程都将调用WriteData()方法。您可以使用以下方式锁定WriteData()方法:

  1. Monitor.Enter()方法。
  2. Lock语句。

使用监视锁及Monitor.Enter()方法
Monitor类的Enter()方法尝试获取对象上的监视锁。如果另一个线程已经有锁,会阻止方法直到锁被释放。然后调用Monitor.Exit()方法来释放此锁。

以下代码使用Monitor.Enter()方法锁定WriteData()方法:

	using System;
	using System.Threading;
	namespace ThreadExample
	{
   
		class FileAccess
		{
   
			public void WriteData(string Data)
			{
   
				Monitor.Enter(this);
				Console.WriteLine("FileAccess.WriteData - Started");
				Console.WriteLine("FileAccess.WriteData - Working");
				for ( int Cnt = 0; Cnt 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SSM框架学习笔记04 | SpringMVC

文章目录 一、SpringMVC简介二、 请求与响应1. 请求映射路径2. get请求与post请求3. 响应 二、REST风格1.简介 三、 SSM整合四、拦截器1. 定义拦截器2.配置拦截器3.拦截器执行顺序4.拦截器参数5.多个连接器工作流程分析6.拦截器链的运行顺序 一、SpringMVC简介 SpringMVC技术与…

React18-树形菜单-递归

文章目录 案例分析技巧通信展示效果实现代码技巧点技巧点 Refer to 案例分析 https://github.com/dL-hx/manager-fe/commit/85faf3b1ae9a925513583feb02b9a1c87fb462f7 从接口获取城市数据,渲染出一个树形菜单 要求: 可以展开和收起 技巧 学会递归渲染出一个树形菜单, 并点击后…

[Python从零到壹] 七十四.图像识别及经典案例篇之文字图像区域定位及提取分析

欢迎大家来到“Python从零到壹”,在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界。所有文章都将结合案例、代码和作者的经验讲解,真心想把自己近十年的编程经验分享给大家,希望…

力扣67. 二进制求和算法

一、【写在前面】 这道题需要,给你两个字符串比如 a "1010", b "1011"答案是:"10101" 然后需要你给出计算结果,那么我们很容易想到两种做法 1. 调库做法:直接转化为整数,然后用内…

2024年AMC8往年真题练一练和答案详解(6),还有全真模拟题

今天是1月13日,2024年AMC8正式比赛已经倒计时了,昨天AMC主办方给所有参赛选手发了短信通知,关于模拟竞赛的操作方式和实际比赛的要求指南,大家一定要认真阅读,严格按指南操作,六分成长也会详细为大家解读和…

【剪枝】【广度优先】【深度优先】488祖玛游戏

作者推荐 【动态规划】458:可怜的小猪 涉及知识点 剪枝 广度优先 深度优先 488祖玛游戏 在这个祖玛游戏变体中,桌面上有 一排 彩球,每个球的颜色可能是:红色 ‘R’、黄色 ‘Y’、蓝色 ‘B’、绿色 ‘G’ 或白色 ‘W’ 。你的手中也有一些…

上海AI实验室等开源,音频、音乐统一开发工具包Amphion

上海AI实验室、香港中文大学数据科学院、深圳大数据研究院联合开源了一个名为Amphion的音频、音乐和语音生成工具包。 Amphion可帮助开发人员研究文本生成音频、音乐等与音频相关的领域,可以在一个框架内完成,以解决生成模型黑箱、代码库分散、缺少评估…

C语言天花板——指针(进阶2)

好久不见了各位,甚是想念啊!!!🎶🎶🎶 文章接上次的指针(进阶1)(http://t.csdnimg.cn/c39SJ),我们继续发车咯🚗🚗🚗 五、函数指针 上次我们只是浅…

py的函数讲解

前言:本章节我们来讲函数,主播略微感觉到有点小难,友友们需要认真看 目录 一.初始函数 1.1关于函数 1.2举例 1.3小结 二.函数的基础语法 2.1关于函数的语法 2.2举例 2.3小结 三.函数的参数 3.1关于函数的参数 3.2举例 3.3小结 四.函数的返回…

【AI】 AIOTSummary

智能物联网(AIoT)是2018年兴起的概念,指系统通过各种信息传感器实时采集 各类信息(一般是在监控、互动、连接情境下的),在终端设备、边缘域或云中心 通过机器学习对数据进行智能化分析,包括定位、比对、预测、调度等。智能物联网(AIoT)是2018年兴起的概念,指系统通过…

UCB Data100:数据科学的原理和技巧:第十三章到第十五章

十三、梯度下降 原文:Gradient Descent 译者:飞龙 协议:CC BY-NC-SA 4.0 学习成果 优化复杂模型 识别直接微积分或几何论证无法帮助解决损失函数的情况 应用梯度下降进行数值优化 到目前为止,我们已经非常熟悉选择模型和相应损…

2023年全国职业院校技能大赛软件测试赛题—单元测试卷⑨

单元测试 一、任务要求 题目1:根据下列流程图编写程序实现相应分析处理并显示结果。返回文字“xa*a*b的值:”和x的值;返回文字“xa-b的值:”和x的值;返回文字“xab的值:”和x的值。其中变量a、b均须为整型…

VMware workstation安装MX-23.1虚拟机并配置网络

VMware workstation安装MX-23.1虚拟机并配置网络 MX Linux是基于Debian稳定分支的面向桌面的Linux发行,采用Xfce作为缺省桌面,是一份中量级操作系统。该文档适用于在VMware workstation平台安装MX-23.1虚拟机。 1.安装准备 1.1安装平台 Windows 11 …

Smallpdf扫描、转换、压缩、编辑、签名PDF

【应用名称】:Smallpdf: 扫描、转换、压缩、编辑、签名PDF 【适用平台】:#Android 【软件标签】:#Smallpdf 【应用版本】:1.71.0 【应用大小】:150MB 【软件说明】:通过 Smallpdf,您可以&…

extern static 在linux 和 qt下差别

从五个点来说 1.p3.h 中 静态定义一个const的int 变量并且赋值 2.p5.h 声明函数test2的定义 3. 直接extern 引用声明 test1() 函数 而不是像p5.h一样 把函数声明写到头文件 在别的.c文件直接包含头文件 第二点和第三点 是引用声明函数的两种用法 4.main函数 中static静态定…

Vue3+Vite连接高德地图JS API——地图显示、输入搜索

1 开通高德地图Web端JS API服务 1、进入高德地图API官网(https://lbs.amap.com/): 2、注册登录。 3、进入控制台。 4、点击“应用管理”,点击“我的应用”,创建新应用。 5、添加Key,服务平台选择“Web端&…

海外云手机助力企业拓展海外市场

在当前全球化的商业环境中,由于政策限制,许多企业面临着无法顺利将产品推广到国外的困境,使得海外市场的机遇白白流失。而随着科技的不断创新,一种解决企业海外拓展困境的工具应运而生,那就是海外云手机。本文将深入探…

使用Navicat导入csv数据至mysql

问题 使用Navicat导入csv数据至mysql 详细问题 笔者有已进行数据处理的csv,需要将数据信息导入mysql中 解决方案 步骤1、建立数据表,字段信息(最好)与csv字段信息保持一致,方便后续导入。 具体的,双击…

什么情况下考虑同时接入SD-WAN与MPLS

在企业网络架构中,SD-WAN和MPLS(多协议标签交换)都是常见的网络连接解决方案。而有时候,企业可能面临一种情况,即需要同时接入SD-WAN和MPLS。本文将探讨在什么情况下考虑同时使用这两种网络连接方式,并分析…

NVMe over TCP高性能文件存储,让未来照进现实,400us

你真的懂NVMe吗? 在说NVMe之前,我们觉得有必要先聊一聊NVM(Non-Volatile Memory),即非易失性内存。从名字上看就知道,NVM是一种类内存式(访问及寻址方式类似)的设备,它必…