VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > Python基础教程 >
  • Python3基础之Python线程同步锁

前面一节的案例提出了多线程数据同步所存在的问题,当多个Author线程修改同一个共享数据时,会发生数据覆盖或丢失的问题。

为了解决多个线程修改同一数据而发生数据覆盖或丢失的问题,Python提供了Lock对象来加保护伞,以保证数据的安全。线程调用Lock对象的acquire方法来获取锁对象(如果其他线程已经获得该锁,则当前线程需等待被释放),待资源访问完后,在调用release方法释放锁。

主线程修改代码如下:

上面的代码通过threading模块的lock()方法获取Lock对象,并传入到创建的Author线程里。

Author线程的代码如下:

在Author线程的run()方法中,使用锁对象对content数据进行保护,被加锁的content数据不能被其它线程修改,直至锁对象被释放后,其它线程才能获取该数据的修改权。

程序经过改造后,输出结果如下图所示:

图 1 使用Lock对象后程序输出结果

从输出结果可以看出,创作的内容都获得了输出,这得益于Lock对象对共享数据的保护作用。Lock对象实际上是一个互斥锁,Lock对象应在主线程创建,并在主线程创建的子线程中使用。当子线程需要修改主线程的共享数据时,子线程调用Lock对象的acquire()方法获取锁对象,对共享数据加锁保护,共享数据被加锁后,其它线程将无法获得共享数据的使用权,直至子线程调用Lock对象的release()方法释放锁。


相关教程