2023/11/08_tableAndRowLock
using System;
using System.Collections.Generic;
using System.Threading;
public class LockExample
{
private static ConcurrentDictionary<string, ReaderWriterLockSlim> tableLocks = new ConcurrentDictionary<string, ReaderWriterLockSlim>();
private static ConcurrentDictionary<string, ReaderWriterLockSlim> rowLocks = new ConcurrentDictionary<string, ReaderWriterLockSlim>();
public void LockTable(string tableName)
{
ReaderWriterLockSlim tableLock;
lock (tableLocks)
{
if (!tableLocks.TryGetValue(tableName, out tableLock))
{
tableLock = new ReaderWriterLockSlim();
tableLocks.Add(tableName, tableLock);
}
}
tableLock.EnterWriteLock();
}
public void UnlockTable(string tableName)
{
ReaderWriterLockSlim tableLock;
lock (tableLocks)
{
if (tableLocks.TryGetValue(tableName, out tableLock))
{
tableLock.ExitWriteLock();
}
else
{
Console.WriteLine("Table is not locked.");
}
}
}
public void LockRow(string rowId)
{
ReaderWriterLockSlim rowLock;
lock (rowLocks)
{
if (!rowLocks.TryGetValue(rowId, out rowLock))
{
rowLock = new ReaderWriterLockSlim();
rowLocks.Add(rowId, rowLock);
}
}
rowLock.EnterWriteLock();
}
public void UnlockRow(string rowId)
{
ReaderWriterLockSlim rowLock;
lock (rowLocks)
{
if (rowLocks.TryGetValue(rowId, out rowLock))
{
rowLock.ExitWriteLock();
}
else
{
Console.WriteLine("Row is not locked.");
}
}
}
}
public class Program
{
public static void Main(string[] args)
{
LockExample lockExample = new LockExample();
// 锁定表
lockExample.LockTable("Products");
// 锁定行
lockExample.LockRow("1");
// 解锁行
lockExample.UnlockRow("1");
// 解锁表
lockExample.UnlockTable("Products");
}
}
Last updated