• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >python > Python多线程编程(六):可重入锁RLock

Python多线程编程(六):可重入锁RLock

作者:junjie 字体:[增加 减小] 来源:互联网

junjie 通过本文主要向大家介绍了python rlock,rlock,python 多线程,python多线程编程,python多线程实例等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

考虑这种情况:如果一个线程遇到锁嵌套的情况该怎么办,这个嵌套是指当我一个线程在获取临界资源时,又需要再次获取。

根据这种情况,代码如下:
'''
Created on 2012-9-8
 
@author: walfred
@module: thread.ThreadTest6
''' 
 
import threading 
import time 
 
counter = 0 
mutex = threading.Lock() 
 
class MyThread(threading.Thread): 
    def __init__(self): 
        threading.Thread.__init__(self) 
 
    def run(self): 
        global counter, mutex 
        time.sleep(1); 
        if mutex.acquire(): 
            counter += 1 
            print "I am %s, set counter:%s" % (self.name, counter) 
            if mutex.acquire(): 
                counter += 1 
                print "I am %s, set counter:%s" % (self.name, counter) 
                mutex.release() 
            mutex.release() 
 
if __name__ == "__main__": 
    for i in range(0, 200): 
        my_thread = MyThread() 
        my_thread.start()
</div>

这种情况的代码运行情况如下:
I am Thread-1, set counter:1
</div>
之后就直接挂起了,这种情况形成了最简单的死锁。

那有没有一种情况可以在某一个线程使用互斥锁访问某一个竞争资源时,可以再次获取呢?在Python中为了支持在同一线程中多次请求同一资源,python提供了“可重入锁”:threading.RLock。这个RLock内部维护着一个Lock和一个counter变量,counter记录了acquire的次数,从而使得资源可以被多次require。直到一个线程所有的acquire都被release,其他的线程才能获得资源。上面的例子如果使用RLock代替Lock,则不会发生死锁:

代码只需将上述的:

mutex = threading.Lock()
</div>
替换成:
mutex = threading.RLock()
</div>
即可。

</div>

您可能想查找下面的文章:

  • Python多线程编程(六):可重入锁RLock
  • Python多线程同步Lock、RLock、Semaphore、Event实例
  • Python多线程同步Lock、RLock、Semaphore、Event实例

相关文章

  • python抓取网页内容示例分享
  • Python3读取UTF-8文件及统计文件行数的方法
  • Python中关键字nonlocal和global的声明与解析
  • python中sys.argv参数用法实例分析
  • win7安装python生成随机数代码分享
  • Ubuntu 14.04+Django 1.7.1+Nginx+uwsgi部署教程
  • Django中对数据查询结果进行排序的方法
  • python打开文件并获取文件相关属性的方法
  • 浅谈django中的认证与登录
  • Python中的localtime()方法使用详解

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • Python中处理字符串之endswith()方法的使用简介
    • Python中操作文件之write()方法的使用教程
    • Python基类函数的重载与调用实例分析
    • python黑魔法之参数传递
    • 对于Python的Django框架使用的一些实用建议
    • 如何使用七牛Python SDK写一个同步脚本及使用教程
    • 在Django的模型中添加自定义方法的示例
    • 寻找网站后台地址的python脚本
    • Python+Pika+RabbitMQ环境部署及实现工作队列的实例教程
    • Python实现简单字典树的方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有