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

这篇具有很好参考价值的文章主要介绍了C#编程-在线程中使用同步。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

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

在线程中使用同步

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


同步线程

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

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

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

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

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

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

下图显示了线程间的同步。
C#编程-在线程中使用同步,C#编程,c#

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

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

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

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

以下代码使用Monitor.Enter()方法锁定WriteData()方法:文章来源地址https://www.toymoban.com/news/detail-793865.html

	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 

到了这里,关于C#编程-在线程中使用同步的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 并发编程 --- 信号量线程同步

    上文编码技巧 --- 同步锁对象的选定中,提到了在C#中,让线程同步有两种方式: 锁(lock、Monitor等) 信号量(EventWaitHandle、Semaphore、Mutex) 加锁是最常用的线程同步的方法,就不再讨论,本篇主要讨论使用信号量同步线程。 实际上,再C#中 EventWaitHandle 、 Semaphore 、 Mutex 都是

    2024年02月16日
    浏览(42)
  • 【Java 基础篇】Java多线程编程详解:线程创建、同步、线程池与性能优化

    Java是一门强大的编程语言,其中最引人注目的特性之一是多线程支持。多线程允许我们在同一程序中同时执行多个任务,这大大提高了应用程序的性能和响应能力。本文将深入介绍Java线程的基础知识,无论您是初学者还是有一些经验的开发人员,都将从中获益。 在计算机科

    2024年02月07日
    浏览(57)
  • Java并发编程(三)线程同步 上[synchronized/volatile]

    当使用多个线程来访问同一个数据时,将会导致数据不准确,相互之间产生冲突,非常容易出现线程安全问题,比如多个线程都在操作同一数据,都打算修改商品库存,这样就会导致数据不一致的问题。 所以我们通过线程同步机制来保证线程安全,加入同步锁以避免在该线程没有完成

    2024年02月13日
    浏览(44)
  • C#编程-实现多线程

    多线程帮助同时执行各种操作。这为用户节省时间。多线程程序包括一个主线程和其他用户定义的线程以同时执行多个任务。 微处理器为执行的进程分配内存。每个进程占有内存中它们自己的地址空间。但是,所有在进程中的线程占有相同的地址空间。多线程允许在一个程序

    2024年02月02日
    浏览(44)
  • C# 消息队列、多线程、回滚、并行编程、异步编程、反射

    消息队列是一种在应用程序之间传递消息的异步通信机制。它可以使应用程序解耦并提高系统的可伸缩性和可靠性。在 C# 中,你可以使用多个消息队列技术,其中一种广泛使用的技术是 RabbitMQ。 RabbitMQ 是一个开源的消息代理,实现了高级消息队列协议(AMQP),提供了强大的

    2024年01月17日
    浏览(42)
  • C#编程-了解线程的优先级

    控制线程行为的一个属性是它的优先级。.NET运行时环境基于它们的优先级执行线程。CPU一次仅执行一个线程。因此,处于执行的可运行状态的线程,排队等待轮到被处理器执行。线程是固定优先级调度的。带有优先级的每个线程在处理器的线程队列中有自己的位置。 线程优

    2024年01月16日
    浏览(40)
  • C# 中的多线程和异步编程

    最近在看代码的过程中,发现有很多地方涉及到多线程、异步编程,这是比较重要且常用的知识点,而本人在这方面还理解尚浅,因此开始全面学习C#中的多线程和异步编程,文中部分内容摘抄自一位前辈的网站:网址链接,为了更便于理解和学习,本人还在个别地方做了一

    2023年04月08日
    浏览(50)
  • 金三银四-解锁Java并发编程的艺术:掌握多线程、同步和并发控制的精髓

            又要快到一年一度的金三银四,开始复习啦~!         每天一点点。。 目录 一、Java中的volatile有什么作用? 二、解释Java中的synchronized及其工作原理。 三、Java中的CAS操作是什么?它如何实现无锁编程? 四、讲述Java中的Lock接口及其与synchronized的区别

    2024年01月17日
    浏览(49)
  • unity的C#学习——多线程编程(线程的生命周期、创建与管理)与线程相关类

    多线程编程是 C# 一个比较难且涵盖面比较广的知识点,本文整理仓促而且属于笔记向博客,有些地方必然还存在不严谨和错误,本人会在日后的使用过程中不断完善。如果发现问题或有改进意见可以在评论区提出,我会及时修改。 线程是程序的执行流程,也被称为 轻量级进

    2024年02月12日
    浏览(46)
  • 【深入浅出C#】章节 9: C#高级主题:多线程编程和并发处理

    多线程编程和并发处理的重要性和背景 在计算机科学领域,多线程编程和并发处理是一种关键技术,旨在充分利用现代计算机系统中的多核处理器和多任务能力。随着计算机硬件的发展,单一的中央处理单元(CPU)已经不再是主流,取而代之的是多核处理器,这使得同时执行

    2024年02月11日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包