首页 > 技术文章 > 线程 同步 以3人买车票为例。

bingyizhihun 2018-01-08 15:02 原文

线程同步  示范1

 

 代码如下:

 

 

 运行结果如下:

 

 

从运行结果可以看出,两个线程同步访问共享资源,没有考虑同步的问题,结果不正确。

 

所以需要线程同步。 

 

所谓同步:是指在某一时刻只有一个线程可以访问变量。
如果不能确保对变量的访问是同步的,就会产生错误。

 

c#为同步访问变量提供了一个非常简单的方式,即使用c#语言的关键字Lock,它可以把一段代码定义为互斥段,

在同一时间内:只有一个线程可以访问互斥段的代码,其他线程需要进行等待。

Lock(expression)
{
   statement_block
}

expression代表你希望上锁的对象:
           如果你想保护一个类的实例,一般地,你可以使用this;
           如果你想保护一个静态变量(如互斥代码段在一个静态方法内部),一般使用类名就可以了

 

线程同步示例 2:

 

本次例子  是三人去 买车票的例子:

 

 

 

 

运行结果如下:

 

线程同步,在同一时间段只有一个线程能够访问 同一个方法(互斥代码段), 就避免了:车票已经卖完,乘客还允许买到车票的问题。

 

推荐阅读