python版本的读写锁操作方法
作者:manny 发布时间:2023-04-29 05:18:57
标签:python,读写锁
本文实例讲述了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程序设计有所帮助。


猜你喜欢
- 一、Position1、语法:position:static/ absolute / fixed / relative2、参数:(1)sta
- 1. 起因当我们需要写一个非常非常长的循环时,通常在某个循环如果出现error,那么整个代码后面的循环就不能进行。这时候试想,如果你在服务器
- 如何制作K线图?也不难,代码和说明见下:<%@ Language=VBScript %><%Respo
- 本文实例讲述了Python学习笔记基本数据结构之序列类型list tuple range用法。分享给大家供大家参考,具体如下:list 和
- 必要准备你得有一个sqlserver数据库,并且要和vs项目连接。关于VS连接sqlserver数据库的教程前几天发过了,链接如下VS202
- 一、什么是框架框架的本质就是一个socket服务,可以完成不同主机之间的通信。它是一个半成品的项目,其中可能已经封装好了基本的功能,比如路由
- 如下所示:# 创建一个空的 DataFramedf_empty = pd.DataFrame()#或者df_empty = pd.DataF
- 本文主要介绍了IDEA配置连接MYSQL数据库遇到Failed这个问题解决,分享给大家,具体如下: &nb
- require 方法的加载规则优先从缓存中加载核心模块路径形式的模块第三方模块一、优先从缓存中加载main.js:执行加载a.js模块req
- 本文实例讲述了Python单元测试与测试用例。分享给大家供大家参考,具体如下:单元测试与测试用例简介测试用例是一组单元测试,这些单元测试一起
- 刷票一般要突破以下限制:1、验证码识别2、同一ip不可连续投票解决办法1、用tesseract工具,链接在此 https://code.go
- 循环链表就是将单链表的末尾指向其头部,形成一个环。循环链表的增删操作和单链表的增删操作区别不大。只是增加时,需要考虑空链表增加第一个节点的特
- 1、简要说明结巴分词支持三种分词模式,支持繁体字,支持自定义词典2、三种分词模式全模式:把句子中所有的可以成词的词语都扫描出来, 速度非常快
- 登录SYS创建临时表空间/*创建临时表空间 */create temporary tablespace 表空间名 t
- 将PHP的执行页面预先转换成HTML,是所谓的PHP静态化方法之一。其他还有模板替换法,opcache等方法。静态化的作用:提高网站的响应速
- 今天看到一个教程,是关于Python安装pygame模块的。觉得很好,拿来分享一下。安装Python额,这个小题貌似在这里很是多余啊。但是为
- 一、Python官方标准库:Tkinter (必须了解)Python内置图形界面库——Tkinter
- 新建图像文件后选Channels面板,新建Alpha1通道:输入文字; &nbs
- 一、下载xlsx插件npm i xlsx二、通过element-ui组件的upload组件上传文件<el-upload
- vue-cli使用stimulsoft.reports.js(保姆级教程)第一部分:数据源准备以下是JSON数据的教程json数据结构{&q