1、传统的lock
lock简单易用,适合大多数场景,但在高竞争用情况下可能会导致线程阻塞;
Object obj = new object();
void method1()
{
lock (obj)
{
// 进行互斥操作
}
}
2、SpinLock
SpinLock在低延迟情况下更有效,因为SpinLock会在忙等待(spin)中尝试获取锁;但在高竞用时,可能导致更高的CPU使用率。
SpinLock适合短时间锁定,而lock更通用。选择时需要根据具体的使用场景和性能需求来决定。
SpinLock spinLock = new SpinLock();
void method2()
{
bool lockTaken = false;
spinLock.Enter(ref lockTaken);
try
{
// 进行互斥操作
}
finally
{
if (lockTaken)
{
spinLock.Exit(true);
}
}
}
注意:
在SpinLoc