lock是一种语言级别的关键字,用于实现线程同步和互斥。它提供了一种简单的方式来确保多个线程不会同时访问共享资源,从而避免竞争条件和数据不一致的问题。
作用:
1、避免并行运算中,共享数据的的读写安全问题;
2、并行执行时,在锁的位置只有一个程序可以获得锁,其他程序无法获得;
3、锁的出现使得并行执行得地方在锁的位置执行串行;
分类:
1:互斥锁
最常见的锁类型之一。它确保在任何时刻只有一个线程可以访问被保护的资源,其他线程必须等待锁的释放才能继续执行
2:读写锁
允许多个线程同时读取共享资源,但只有一个线程可以写入共享资源
3:自旋锁
一种忙等待的锁,当线程尝试获取锁时,如果发现锁已经被占用,它会一直循环等待直到锁可用
4:条件变量
5:信息量
举个官方的例子:
using System;
using System.Threading.Tasks;
public class Account
{
//账户余额锁
private readonly object balanceLock = new object();
//账户余额
private decimal balance;
public Account(decimal initialBalance) => balance = initialBalance;
//扣除金额
public decimal Debit(decima