【多线程】线程的同步

本文介绍了多线程中线程同步和互斥的概念,强调了它们在处理共享资源时的重要性。通过C#的lock、Monitor等方法展示了如何实现线程同步,并提供了一个利用Monitor的Wait()和Pulse()方法实现线程协同执行的示例。
摘要由CSDN通过智能技术生成

多线程共享一个进程的地址空间,虽然线程间通信容易进行,但是多线程同时访问共享对象时需要引入同步和互斥机制。

线程同步:多个任务按照约定的顺序相互配合完成一件事,基于信号量的概念提出了一种同步机制,由信号量来决定线程是继续运行还是阻塞等待。

线程互斥:线程间同步访问临界资源时的互相等待,引入互斥锁的目的是用来保证共享资源数据操作的完整性。互斥锁主要用来保护临界资源,每个临界资源都有一个互斥锁来保护,任何时刻最多只能有一个线程能访问该资源。线程必须先获得互斥锁才能访问临界资源,访问玩临界资源后释放该锁。如果无法获得锁,线程会阻塞直到获得锁为止。临界资源是指每次仅允许一个进程访问的资源,属于临界资源的硬件有打印机、磁带机等,软件有消息缓冲队列、变量、数组、缓冲区等,线程间应采取互斥方式,实现对这种资源的共享。每个线程中访问临界资源的那段代码称为临界区

在C#中实现线程的同步有几种方法:lock、Mutex、Monitor、Semaphore、Interlocked和ReaderWriterLock等。同步策略也可以分为同步上下文、同步代码区、手动同步几种方式。

1、同步代码区
同步代码区,它是针对特定部分代码进行同步的一种方法。

(1)、lock同步, lock语句是一种有效的、不跨越多个方法的小代码块同步的做法,也就是使用lock语句只能在某个方法的部分代码之间,不能跨越方法。

       参考程序:

public class ThreadTwo : MonoBehaviour 
{
	private Thread _trdOne;
	private Thread _trdTwo;

	private List<string> _slTricket = new List<string>();

	private object _oLock = new object();

	void Start () 
	{
		TricketList();

		_trdOne = new Thread(new ThreadStart(Run));	
		_trdTwo = new Thread(new ThreadStart(Run));
		_trdOne.Name = "trdOne";
		_trdTwo.Name = "trdTwo";
		_trdOne.Start();
		_trdTwo.Start();

	}
	void Tricke
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值