python写一段代码,解决读者,写者问题
时间: 2023-06-04 21:07:26 浏览: 54
好的,下面是一段Python代码,可以解决读者-写者问题:
```python
import threading
class ReadWriteLock:
def __init__(self):
self._read_lock = threading.Lock()
self._write_lock = threading.Lock()
self._read_count = 0
def read_acquire(self):
with self._read_lock:
self._read_count += 1
if self._read_count == 1:
self._write_lock.acquire()
def read_release(self):
with self._read_lock:
self._read_count -= 1
if self._read_count == 0:
self._write_lock.release()
def write_acquire(self):
self._write_lock.acquire()
def write_release(self):
self._write_lock.release()
# Example usage
lock = ReadWriteLock()
data = []
def reader():
while True:
lock.read_acquire()
print("Reading data:", data)
lock.read_release()
def writer():
while True:
lock.write_acquire()
print("Writing data")
data.append("some data")
lock.write_release()
# Create some threads to act as readers and writers
for i in range(5):
threading.Thread(target=reader).start()
for i in range(2):
threading.Thread(target=writer).start()
```
这段代码定义了一个ReadWriteLock类,用于控制并发读写。读者线程通过调用read_acquire()获取读取锁,读取数据后调用read_release()释放读取锁。写者线程通过调用write_acquire()获取写入锁,并在完成写入操作后调用write_release()释放写入锁。这样可以确保同一时间只有一个线程在写入数据,同时允许多个线程同时读取数据。