Python锁机制相关问题解决方案


一、如何避免死锁

当两个线程同时等待对方释放资源时,就出现了死锁。Python解释器没有监测,也不会主动采取措施处理死锁情况,因此在进行多线程编程时应该采取措施避免死锁情况出现。

四种常见的解决死锁问题的方法:

  • 避免多次加锁。应尽量避免同一线程中对多个Lock进行锁定。
  • 按序加锁。如果多个线程需要对多个Lock进行锁定,应该保证他们以相同的顺序请求加锁。
  • 定时锁。在调用acquire()方法加锁时指定timeout参数,该参数指定timaout秒后会自动释放对Lock的锁定,这样就可以解决死锁了。
  • 死锁检测。死锁检测是一种依靠算法机制实现的死锁预防机制。主要针对那些不可能实现按序加锁,也不可能实现定时锁的场景。

二、怎么减少线程安全带来的负面影响?

多线程的优势在于并发性,即可以同时运行多个任务。但是当程序中需要访问共享资源时,就可能会因为数据同步问题而发生错误,这是由于系统的线程调度具有一定的随机性造成。
不可变类总是线程安全的,因为的它的对象状态是不可改变的,但是对象状态可变的类需要额外的方法保证其线程安全。通常线程安全性的保障是通过互斥锁机制实现的,通过互斥锁可以很方便的实现线程安全的类,这里不做过多介绍。

可变类的线程安全性保障是以降低程序的运行效率为代价的,为了减少线程安全所带来的负面影响,程序设计可采用两种策略:
  • 不要对线程安全类的所有方法进行同步控制,只对那些会该改变竞争资源(共享资源)的方法进行同步控制;
  • 如果可变类存在多种运行环境,单线程环境和多线程环境,可为可变类实现多个版本,线程不安全版本和线程安全版本,在单线程环境下运行线程不安全版本,在多线程环境下运行线程安全版本。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 引用自多线程编程指南应用程序里面多个线程的存在引发了多个执行线程安全访问资源的潜在问题。两个线程同时修改同一资源有...
    Mitchell阅读 2,154评论 1 7
  • 一、线程状态转换新建(New)可运行(Runnable)阻塞(Blocking)无限期等待(Waiting)限期等...
    达微阅读 797评论 1 2
  • 所有知识点已整理成app app下载地址 J2EE 部分: 1.Switch能否用string做参数? 在 Jav...
    侯蛋蛋_阅读 2,734评论 1 4
  • 翻译:Synchronization 同步 应用程序中存在多个线程会导致潜在的问题,这些问题可能会导致从多个执行线...
    AlexCorleone阅读 2,759评论 0 4
  • 每一个程序的运行都是一个进程,而每个进程至少有一个线程,称之为主线程。举个例子:食堂吃饭是一个进程,为了让学生更快...
    小梨的十三阅读 1,062评论 0 1

友情链接更多精彩内容