binary_semaphore使用举例
时间: 2023-12-29 19:02:06 浏览: 86
pc_semaphore.zip_pc_semaphore
假设有两个线程A和B需要访问共享资源,为了避免竞争条件,需要一个二进制信号量来同步它们的访问。下面是使用二进制信号量的示例:
```python
from threading import Thread, Semaphore
# 创建二进制信号量
binary_semaphore = Semaphore(1)
# 共享资源
shared_resource = []
# 线程A函数
def thread_a():
# 获取信号量
binary_semaphore.acquire()
# 访问共享资源
shared_resource.append('A')
# 释放信号量
binary_semaphore.release()
# 线程B函数
def thread_b():
# 获取信号量
binary_semaphore.acquire()
# 访问共享资源
shared_resource.append('B')
# 释放信号量
binary_semaphore.release()
# 创建线程A和线程B
thread1 = Thread(target=thread_a)
thread2 = Thread(target=thread_b)
# 启动线程
thread1.start()
thread2.start()
# 等待线程结束
thread1.join()
thread2.join()
# 打印共享资源
print(shared_resource)
```
在上面的示例中,两个线程分别执行了`thread_a()`和`thread_b()`函数,它们都需要访问共享资源`shared_resource`。为了避免竞争条件,我们使用了一个二进制信号量`binary_semaphore`来同步它们的访问。当一个线程需要访问共享资源时,它需要获取信号量,如果信号量的值为1,表示共享资源可用,线程可以访问;如果信号量的值为0,表示共享资源正在被另一个线程访问,线程需要等待直到信号量的值变为1。当一个线程访问完共享资源后,需要释放信号量,让另一个线程可以访问共享资源。最终,我们打印共享资源的结果,可以看到它们被正确地访问了。
阅读全文