用信号量机制写代码。
时间: 2024-10-21 11:12:11 浏览: 16
信号量(Semaphore)是一种同步原语,通常用于协调多个进程或线程之间的访问共享资源。在编写代码时,信号量可以帮助防止竞态条件和死锁,确保资源的有序分配。下面是一个简单的例子,假设我们需要限制同时只有两个客户端访问数据库:
```python
import threading
# 初始化信号量,设置初始计数值为允许的最大并发数
semaphore = threading.Semaphore(2)
def access_database():
# 调用之前先获取信号量
semaphore.acquire()
try:
# 访问数据库的代码
print(f"Client {threading.current_thread().name} is accessing the database.")
# ...数据库操作...
finally:
# 使用完毕后释放信号量
semaphore.release()
# 创建客户端线程
client1 = threading.Thread(target=access_database)
client2 = threading.Thread(target=access_database)
client1.start() # 第一个客户开始访问
client2.start() # 等待第一个客户结束后第二个才开始
client1.join() # 确保第一个线程完成
client2.join() # 确保第二个线程也完成
```
在这个例子中,`acquire()`会使得当前线程等待直到获得信号量,而`release()`则表示一个客户端完成了对数据库的操作,让下一个等待的客户端能够继续。
阅读全文