python版本的读写锁操作方法


Posted in Python onApril 25, 2016

本文实例讲述了python版本的读写锁操作方法。分享给大家供大家参考,具体如下:

最近要用到读写锁的机制,但是python2.7的自带库里居然木有.
网上讲读写锁的例子众多,但是原理简单,代码明晰的却不多见, 索性自己写个.

读写锁一般用于多个读者,1个或多个写者同时访问某种资源的时候。多个读者之间是可以共享资源的,但是写者与读者之间,写者与写者之间是资源互斥的。

这也就是说同时可以有多个读者或一个写者处于工作状态。

细分下来,读写锁可以分为三类,读者优先,写者优先和公开策略。

第一种,读者优先,
目的是保证读者可以尽可能的不需要等待就获取资源。
实现的要点,写者方面比较简单,只需要一个锁就能控制是否可写。
读者方面,在第一个读者到来的时候就要阻止写者,最后一个读者离开之后再开放写者。这里就存在一个读者计数器的问题,这个计数器是需要在各读者之间共享的,所以需要一个额外的锁来确保该计数器的加减操作的原子性。

实现代码:

定义一个类RWLock,并作简单的初始化

import threading
class RWLock(object):
  def __init__(self):
    self.rlock = threading.Lock()
    self.wlock = threading.Lock()
    self.reader = 0

写者锁

def write_acquire(self):
  self.wlock.acquire()
def write_release(self):
  self.wlock.release()

读者锁

def read_acquire(self):
  self.rlock.acquire()
  self.reader += 1
  if self.reader == 1:
    self.wlock.aquire()
  self.rlock.release()
def read_release(self):
  self.rlock.acquire()
  self.reader -= 1
  if self.reader == 0:
    self.wlock.release()
  self.rlock.release()

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python整型运算之布尔型、标准整型、长整型操作示例
Jul 21 Python
django静态文件加载的方法
May 20 Python
Python面向对象类的继承实例详解
Jun 27 Python
Python求两个圆的交点坐标或三个圆的交点坐标方法
Nov 07 Python
Pycharm取消py脚本中SQL识别的方法
Nov 29 Python
python三大神器之fabric使用教程
Jun 10 Python
python识别文字(基于tesseract)代码实例
Aug 24 Python
在Python中获取操作系统的进程信息
Aug 27 Python
python3 字符串知识点学习笔记
Feb 08 Python
Python如何使用paramiko模块连接linux
Mar 18 Python
python3利用Axes3D库画3D模型图
Mar 25 Python
pycharm无法导入lxml的解决办法
Mar 31 Python
Python简单实现enum功能的方法
Apr 25 #Python
Python爬虫辅助利器PyQuery模块的安装使用攻略
Apr 24 #Python
Linux下通过python访问MySQL、Oracle、SQL Server数据库的方法
Apr 23 #Python
Python 中的 else详解
Apr 23 #Python
Python 探针的实现原理
Apr 23 #Python
一键搞定python连接mysql驱动有关问题(windows版本)
Apr 23 #Python
Linux 发邮件磁盘空间监控(python)
Apr 23 #Python
You might like
支持中文的php加密解密类代码
2011/11/27 PHP
php的array_multisort()使用方法介绍
2012/05/16 PHP
PHP5函数小全(分享)
2013/06/06 PHP
PHP eval函数使用介绍
2013/12/08 PHP
PHP实现文件上传与下载实例与总结
2016/03/13 PHP
jquery.alert 弹出式复选框实现代码
2009/06/15 Javascript
Jquery弹出窗口插件 LeanModal的使用方法
2012/03/10 Javascript
js 调用父窗口的具体实现代码
2013/07/15 Javascript
JS中的构造函数详细解析
2014/03/10 Javascript
jquery中each方法示例和常用选择器
2014/07/08 Javascript
JavaScript中跨域调用Flash的方法
2014/08/11 Javascript
Node.js中的事件驱动编程详解
2014/08/16 Javascript
JavaScript知识点总结(四)之逻辑OR运算符详解
2016/05/31 Javascript
BootStrap Datetimepicker 汉化的实现代码
2017/02/10 Javascript
js获取ip和地区
2017/03/10 Javascript
js 中rewrap-ajax.js插件实例代码
2017/10/20 Javascript
vue.js实现图书管理功能
2019/09/24 Javascript
微信小程序实现上传多张图片、删除图片
2020/07/29 Javascript
Vue 实现v-for循环的时候更改 class的样式名称
2020/07/17 Javascript
[43:32]Winstrike vs VGJ.S 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
[03:08]迎霜节狂欢!2018年迎霜节珍藏Ⅰ一览
2018/12/25 DOTA
Python中的二叉树查找算法模块使用指南
2014/07/04 Python
Python最基本的数据类型以及对元组的介绍
2015/04/14 Python
python创建列表并给列表赋初始值的方法
2015/07/28 Python
Python3.6笔记之将程序运行结果输出到文件的方法
2018/04/22 Python
python2.7和NLTK安装详细教程
2018/09/19 Python
Python字典的基本用法实例分析【创建、增加、获取、修改、删除】
2019/03/05 Python
python调用matplotlib模块绘制柱状图
2019/10/18 Python
Python txt文件如何转换成字典
2020/11/03 Python
详解Python模块化编程与装饰器
2021/01/16 Python
塔吉特百货公司官网:Target
2017/04/27 全球购物
Tuckernuck官网:经典的美国品质服装、鞋子和配饰
2021/01/11 全球购物
什么是属性访问器
2015/10/26 面试题
汽车工程专业应届生求职信
2013/10/19 职场文书
保护环境建议书作文400字
2015/09/14 职场文书
导游词之苏州寒山寺
2019/12/05 职场文书