C#基础提升系列——C#任务同步
C#任务同步 如果需要共享数据,就必须使用同步技术,确保一次只有一个线程访问和改变共享状态。如果不注意同步,就会出现争用条件和死锁。 不同步导致的线程问题 如果两个或多个线程访问相同的对象,并且对共享状态的访问没有同步,就会出现争用条件。为了解决这类问题,可以使用 lock 语句,对共享对象进行锁定,除了进行锁定之外,还可以将共享对象设置为线程安全的对象。 注意:只有引用类型才能使用 lock 进行锁定。 锁定并不是越多越好,过多的锁定会造成死锁,在死锁中,至少有两个线程被挂起,并等待对象解除锁定。由于两个线程都在等待对方,就出现了死锁,线程将无限等待下去。 lock语句和线程安全 C#为多个线程的同步提供了自己的关键字: lock 语句。 使用一个简单的示例来说明 lock 的使用,首先定义两个简单的类来模拟线程计算,这两个类不包含任何的锁操作: class SharedState { public int State { get ; set ; } } class Job { private SharedState _sharedState ; public Job ( SharedState sharedState ) { this . _sharedState = sharedState ; } //该方法不是最终解决方案,存在漏洞,请不要直接应用到实际代码中 public