临界资源互斥问题?

两个或多个并行运行的程序怎么保证临界资源互斥问题?感觉peterson算法可能会导致多个进程都无法访问临界资源的情况,有没有大佬给解释一下,像windows或Linux这些操作系统是如何处理的呢?谢谢

阅读 1.9k
1 个回答

题主的问题可以转化为 “多进程或多线程竞争条件问题”

这块的方案推荐一个网站 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
使用互斥体防止程序多开技术 OSChina
Linux条件变量 OSChina
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题