.NET如何实现互斥?

时间:2011-04-11 22:46:22

标签: c# .net mutex

我理解互斥锁的概念。这是非常好的解释here

但现在我想知道互斥锁到底是什么。我的猜测是.NET正在使用一些原始的系统资源(甚至可能只是一个内存地址?)并将其包装在一个它称为互斥锁的对象中。

任何人都知道在.NET中如何实现互斥锁?

2 个答案:

答案 0 :(得分:5)

如何实现互斥锁很可能取决于硬件。大多数CPU都有某种原子比较和交换指令,可以提供事物的内容。

但是,是的,在引擎盖下,它只是一个信号量 - 一个东西(可能是单词),其值表明它是否发出信号。 OS为线程或进程提供了一种空闲等待的手段,等待信号量进入所需状态。大多数实现,我相信不保证线程可能获得互斥锁的所有权的顺序 - 只是因为你是第一个在线,并不意味着你将是第一个得到它。

答案 1 :(得分:0)

http://msdn.microsoft.com/en-us/magazine/cc164040.aspx会为您提供详细信息。 .NET Mutexes基于Win32线程原语在一天结束时,虽然有些东西有点不同(请记住'lock'语句适用于任何对象,因此CLR中有一些名为SyncBlocks的东西可以处理这一点)。