python read 多线程_python多线程之使用ReadWriteLock

本文介绍了Python中使用Condition类模拟ReadWriteLock,允许多个线程并行读取,但写操作互斥。通过示例代码展示了如何获取和释放读锁及写锁。
摘要由CSDN通过智能技术生成

ReadWriteLock是指允许多个线程同时读,但是只允许一个线程写

这个方法经常用来实现在不写的状态下允许对资源无限读,但要独占写锁。 因为python的threading模块中没有对应实现,上面的方法是通过Condition实现的。

import threading

class ReadWriteLock:

"""A lock object that allows many simultaneous "read-locks", but

only one "write-lock"."""

def __init__(self):

self._read_ready = threading.Condition(threading.Lock())

self._readers = 0

def acquire_read(self):

"""Acquire a read-lock. Blocks only if some thread has

acquired write-lock."""

self._read_ready.acquire()

try:

self._readers += 1

finally:

self._read_ready.release()

def release_read(self):

"""Release a read-lock."""

self._read_ready.acquire()

try:

self._readers -= 1

if not self._readers:

self._read_ready.notifyAll()

finally:

self._read_ready.release()

def acquire_write(self):

"""Acquire a write lock. Blocks until there are no

acquired read- or write-locks."""

self._read_ready.acquire()

while self._readers > 0:

self._read_ready.wait()

def release_write(self):

"""Release a write-lock."""

self._read_ready.release()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值