线程 同步 以3人买车票为例。

线程同步  示范1

 代码如下:

 运行结果如下:

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

所以需要线程同步。 

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

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

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

Lock(expression)
{
   statement_block
}

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

线程同步示例 2:

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

 

运行结果如下:

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

原文地址:https://www.cnblogs.com/bingyizhihun/p/8242762.html