5.互锁(Interlock)
用于增加,减少,交换,比较数值。互锁提供一系列以原子方式访问变量的方法。
int i = 8;
//以原子方式递增指定变量的值
int newValue = Interlocked.Increment(ref i);
//输出9
Console.WriteLine(newValue);
6.读写锁(ReaderWriterLock)
多读者/单写者模式:同时有多个线程读值,但每次只有一个线程写入值。当写入操作进行中,没有线程可被允许读取。
逻辑:没有线程调用AcquireReaderLock() ------> 所有调用AcquireWriterLock()的线程不阻塞(多读)
有线程调用AcquireReaderLock() -------> 先阻塞调用者 --------> 等待所有读取线程结束(调用RleaseReaderLock())
--------> 再开始阻塞其他AcquireReaderLock()和AcquireWriterLock()调用 ---------> 最后完成写入结束写入线程
private ReaderWriterLock m_RWLock;
private string m_MyString;
public string MyString
{
get
{
m_RWLock.AcquireReaderLock(Timeout.Infinite);
try
{
return m_MyString;
}
finally
{
m_RWLock.ReleaseReaderLock();
}
}
set
{
m_RWLock.AcquireWriterLock(Timeout.Infinite);
try
{
m_MyString = value;
}
finally
{
m_RWLock.ReleaseWriterLock();
}
}
}