一、同步
问题产生的原因就是没有控制多个线程对同一资源的访问,对数据造成破坏,使得线程运行的结果不可预期。这种现象称为"线程不安全”"。
同步:就是协同步调,按预定的先后次序进行运行。如:你说完,我再说。如进程、线程同步,可理解为进程或线程A和B一块配合,A执行到一定程度时要依靠B的某个结果,于是停下来,示意B运行;B依言执行,再将结果给A;A再继续操作。这既是同步,
二、同步锁
1、lock=Lock():创建同步锁
2、lock.acquire():获得这把锁的钥匙
3、lock.release():释放锁;如果不释放锁,其他的线程拿不到锁,是不会运行的,释放锁后其他线程会抢这把锁。谁先获得这把锁呢?不一定
4、加锁还可以使用with,效果一样
5、必须使用同一把锁
执行结果:数据很大,没有出现数据混乱问题
如果使用锁,程序会变成串行,因此应该是在适当的地方加锁;线程调度本质上是不确定的,因此,在多线程程序中错误地使用锁机制可能会导致随机数据损坏或者其他的异常行为,我们称之为竞争条件。为了避免竞争条件,最好只在临界区(对临界资源进行操作的那部分代码)使用锁,