【问题标题】:Threading/Synchronization线程/同步
【发布时间】:2009-04-22 12:12:40
【问题描述】:

从概念和实现的角度来看,真正的区别是什么

信号量、互斥量、监视器?

我们说信号量是资源分配计数器...好吧我明白了..

对于互斥量,我们说互斥量是二进制信号量...天哪,那是什么???

监视器保护对象的入口点...即只有一个线程可以获取它并可以运行其中一个受保护的入口点???那么互斥锁是干什么用的?

【问题讨论】:

标签: multithreading synchronization


【解决方案1】:

信号量是一种锁定机制,iirc 从概念上讲,它们可以配置为允许对一个对象进行多个访问;例如一次访问三个,一次访问四个,等等。

Mutex 是信号量的一种特殊情况,用于确保互斥,即在任何给定时间,只有一个人可以访问受保护的资源。

需要注意的是,在等待访问共享资源时,信号量和互斥量都不能确保严格的顺序。当资源变得可访问时,一些等待线程将获得访问权限,但不保证将是哪个线程。从统计上讲,最终所有线程都将(必须)获得访问权限。

监视器通过按特定顺序排队等待的线程/进程来强制执行优先级,而不一定是它们如何到达。操作系统是监视器的一个示例——确保单个进程在任何给定时间都拥有 CPU。

【讨论】:

  • 很好的解释只是一件事。信号量确实持有一个数据结构,可能是一个队列,它本身可以在无法分配资源时使线程等待。这不是订购它们的一种形式吗?如果您能详细说明 Mutex 的工作原理以及差异黑白监视器和互斥体。
  • 没有信号量只保存条件变量。没有带有信号量的队列。队列,如果你想的话,归操作系统所有,通常称为“等待”队列,所有阻塞进程都在其中。当信号量条件为下一个线程/进程准备好时,无论哪个进程首先“唤醒”,都可能获得锁。任何等待的线程都有能力获得锁。 en.wikipedia.org/wiki/Semaphore_(programming) 有一个简单的信号量实现。
猜你喜欢
  • 2014-04-30
  • 1970-01-01
  • 1970-01-01
  • 2018-12-23
  • 2016-01-20
  • 2018-10-02
相关资源
最近更新 更多