临界资源互斥问题?
两个或多个并行运行的程序怎么保证临界资源互斥问题?感觉peterson算法可能会导致多个进程都无法访问临界资源的情况,有没有大佬给解释一下,像windows或Linux这些操作系统是如何处理的呢?谢谢
回复
1个回答
test
2024-06-30
题主的问题可以转化为 “多进程或多线程竞争条件问题”
这块的方案推荐一个网站 OSChina,上面有很丰富的资料
回到问题中,现在有很多成熟的方案
比如 windows
通过
- 临界区(
Critical Section
):它是一种保护共享资源免受并发访问的机制。通过将代码块标记为临界区,在任意时刻只有一个线程可以进入该代码块,并访问其中的共享资源。 - 互斥体(
Mutex
):与 Peterson 算法类似,互斥体也是一种二进制信号量,用于实现对共享资源的互斥访问。Windows 中提供了名为 CreateMutex、WaitForSingleObject 和 ReleaseMutex 的函数来创建和操作互斥体。 - 事件(
Event
):事件是一种同步对象,用于线程间通信和控制流程。Windows 中提供了两种类型的事件对象:自动重置事件和手动重置事件。通过等待(wait)和设置(set)或者复位(reset)事件状态,线程可以进行协调操作。 - 信号量(Semaphore):信号量是一种计数器对象,用于控制对共享资源的访问数量。Windows 提供了 CreateSemaphore、WaitForSingleObject 和 ReleaseSemaphore 等函数来创建和操作信号量。
linux
通过
- 互斥体(
Mutex
):与 Windows 中的互斥体类似,不赘述了 - 条件变量(
Condition Variable
):条件变量用于线程间的等待通知机制。通过等待条件变量,并在满足特定条件时发送信号唤醒等待线程。Linux 中提供了 pthread_cond_t 类型和相关函数来实现条件变量。 - 读写锁(
Read-Write Lock
):读写锁是一种特殊类型的锁,允许多个线程同时对共享资源进行读操作,但只允许一个线程进行写操作。通过使用读写锁可以提高并发性能。Linux 提供了 pthread_rwlock_t 类型和相关函数来实现读写锁。
参考【操作系统】 信号量机制 OSChina使用互斥体防止程序多开技术 OSChinaLinux条件变量 OSChina
回复
适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容