【场景描述】
假如A、B、C三个线程同时对同一个test.txt文本文档进行操作,这个时候如果没有进行锁的操作,那么就会出现错误提示文件正在被操作。
【多线程锁解决】
支持单个写线程和多个读线程的锁,.net 3.5>
可定义在单个的一个方法类里
static ReaderWriterLockSlim LogWriteLock = new ReaderWriterLockSlim();
在单个线程里调用写入txt文本文档方法时,LogWriteLock.IsWriteLockHeld的值是true,会自动进入写入锁-EnterWriteLock,完成后退出写入锁。
try
{
if (!LogWriteLock.IsWriteLockHeld)
LogWriteLock.EnterWriteLock(); //进入写入锁
}
catch (Exception ex)
{
string msg = ex.Message;
if (LogWriteLock.IsWriteLockHeld)
LogWriteLock.ExitWriteLock(); //退出写入锁
}
finally
{
if (LogWriteLock.IsWriteLockHeld)
LogWriteLock.ExitWriteLock(); //退出写入锁
}
注:不在线程内调用并使用锁方法可能会报错