线程同步技术
使用线程同步技术有两个原因:
数据安全问题,多个线程去取同一个数据源中的数据,如果不加同步锁会导致数据的脏读问题。
协作顺序问题,多个线程完成同一个任务时,线程之间应该有同步和交互来协调各个线程。
Python的threading模块提供了多种用于线程同步的对象,在后面会一一介绍。
3.1 Lock/RLock对象
Lock是比较低级的同步原语,当被锁定以后不属于特定的线程。一个锁有两种状态:locked 和 unlocked。
如果锁处于unlocked状态,acquire()方法将其修改为locked并立即返回
如果锁已处于locked状态,则阻塞当前线程并等待其他线程释放锁,然在获取到了锁后将其修改为locked并立即返回。
release()方法用来将锁的状态由locked修改为unlocked并立即返回,如果锁状态本就是unlocked,调用该方法会抛出异常.
可重入锁RLock对象也是一种常用的线程同步原语,可以被同一个线程acquire()多次。
当处于locked状态时,某线程拥有该锁
当处于unlocked状态时,该锁不属于任何线程。
RLock对象的acquire()/release()调用时可以嵌套,仅当最后一个或最外层的release()执行结束,锁才会被设置为unlocked状态
————————————————
版权声明:本文为CSDN博主「ChanZany」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_41819729/article/details/105489655