Kernel-mode Constructs一般翻译为内核模式构造 ,
Constructs 即是一个名词也是一个动词,但是翻译为构造感觉有点像一个动词,个人感觉翻译为名词更好,毕竟是加了s的,就表示多个,动词显然不能表示多个啊,比如内核模式构造物,内核模式构造体。
环境说明
IDE:Visual Studio 2022
OS:Win10
.NET:.Net4.6.1
内核模式构体造简单的来说就是由Windows内核为我们的提供的一些方法 参数 变量来同步线程,这些构造和window系统密切相关。内核构造虽然相对去用户模式的构造要慢一点,但是不会产生疯狂的自旋,占用CPU资源。
事件和信号量是两种常见的内核构造物。
event其实就是一个由内核维护的bool变量。
代码如下(示例):
public sealed class EventLock : IDisposable
{
private readonly AutoResetEvent m_available;
public EventLock()
{
m_available = new AutoResetEvent(true); // Initially free
}
public void Enter()
{
// Block in kernel until resource available
m_available.WaitOne();
}
public void Leave()
{
// Let another thread access the resource
m_available.Set();
}
public void Dispose()
{
m_available.Dispose();
}
}
代码如下(示例):
public sealed class EventLock : IDisposable
{
private readonly AutoResetEvent m_available;
public EventLock()
{
m_available = new AutoResetEvent(true); // Initially free
}
public void Enter()
{
// Block in kernel until resource available
m_available.WaitOne();
}
public void Leave()
{
// Let another thread access the resource
m_available.Set();
}
public void Dispose()
{
m_available.Dispose();
}
}
效果如下

可以看出加上了事件锁后,确实能保证输出的顺序,而没有加锁的数据是乱序,甚至可能出行脏数据的情况