线程 同步 以3人买车票为例。
线程同步 示范1
代码如下:
运行结果如下:
从运行结果可以看出,两个线程同步访问共享资源,没有考虑同步的问题,结果不正确。
所以需要线程同步。
所谓同步:是指在某一时刻只有一个线程可以访问变量。
如果不能确保对变量的访问是同步的,就会产生错误。
c#为同步访问变量提供了一个非常简单的方式,即使用c#语言的关键字Lock,它可以把一段代码定义为互斥段,
在同一时间内:只有一个线程可以访问互斥段的代码,其他线程需要进行等待。
Lock(expression)
{
statement_block
}
expression代表你希望上锁的对象:
如果你想保护一个类的实例,一般地,你可以使用this;
如果你想保护一个静态变量(如互斥代码段在一个静态方法内部),一般使用类名就可以了
线程同步示例 2:
本次例子 是三人去 买车票的例子:
运行结果如下:
线程同步,在同一时间段只有一个线程能够访问 同一个方法(互斥代码段), 就避免了:车票已经卖完,乘客还允许买到车票的问题。