编写一个程序,使用信号量(semaphore)实现3个进程对共享资源的互斥访问
时间: 2024-12-09 07:18:30 浏览: 13
用有名信号量和匿名信号量实现进程互斥
编写一个使用信号量(Semaphore)实现3个进程互斥访问共享资源的程序通常是在操作系统编程或并发控制领域的一个常见示例。信号量是一种同步工具,用于控制同时访问某个资源的数量。在这个例子中,我们可以创建一个表示资源可用状态的信号量,初始值设为1,意味着只有一次访问权限。
以下是一个简单的Python伪代码示例:
```python
import threading
from threading import Semaphore
# 创建一个全局信号量,初始值为1
resource_semaphore = Semaphore(1) # 当前只有一个资源实例
def process_task(process_id):
with resource_semaphore: # 进入临界区,获取信号量
print(f"Process {process_id} is executing on the shared resource.")
# 在这里处理共享资源操作...
resource_semaphore.release() # 执行完任务后释放信号量,允许其他进程进入
# 创建三个线程
threads = [threading.Thread(target=process_task, args=(i,))
for i in range(1, 4)] # 从1到3,因为0通常代表主线程
# 启动所有线程
for thread in threads:
thread.start()
# 等待所有线程完成
for thread in threads:
thread.join()
```
在这个程序中,每个进程试图通过`with resource_semaphore:`来获取信号量。当资源被占用(信号量值为0)时,它们会阻塞直到资源被释放。这样就保证了任何时候只有一个进程能访问共享资源,实现了互斥访问。
阅读全文