110,539
社区成员
发帖
与我相关
我的任务
分享
static void Main(string[] args)
{
Thread ThrdA = new Thread(FunA);
ThrdA.Start();
Console.ReadLine();
}
public static void FunA()
{
Timer timerA = new Timer(new TimerCallback(A), null,0, 3000);
}
public static void A(object a)
{
Console.WriteLine("{0}", Thread.CurrentThread.ManagedThreadId);
}
static void Main(string[] args)
{
Thread AThrd = new Thread(AutoAddFun);
Thread RThrd = new Thread(AutoReadFun);
AThrd.Start();
RThrd.Start();
Console.ReadLine();
}
static List<int> numList = new List<int>();
static ReaderWriterLock rwl = new ReaderWriterLock();
public static void AutoAddFun()
{
Timer timerAdd = new Timer(new TimerCallback(Add), null, 0, 3000);
}
public static void AutoReadFun()
{
Timer timerRead1 = new Timer(new TimerCallback(Read), null, 0, 1000);
Timer timerRead2 = new Timer(new TimerCallback(Read), null, 0, 1000);
Timer timerRead3 = new Timer(new TimerCallback(Read), null, 0, 1000);
}
public static void Add(object obj)
{
var num = new Random().Next(0, 1000);
rwl.AcquireWriterLock(TimeSpan.FromSeconds(30));
numList.Add(num);
Console.WriteLine("我是线程{0},我插入的数据是{1}。", Thread.CurrentThread.ManagedThreadId, num);
rwl.ReleaseWriterLock();
}
public static void Read(object obj)
{
rwl.AcquireReaderLock(TimeSpan.FromSeconds(30));
Console.WriteLine("我是线程{0},我读到的集合是{1}.", Thread.CurrentThread.ManagedThreadId, string.Join(",", numList));
rwl.ReleaseReaderLock();
}
public static void Add(object obj)
{
var num = new Random().Next(0, 1000);
try
{
rwl.AcquireWriterLock(TimeSpan.FromSeconds(30));
try
{
numList.Add(num);
Console.WriteLine("我是线程{0},我插入的数据是{1}。", Thread.CurrentThread.ManagedThreadId, num);
}
finally
{
rwl.ReleaseWriterLock();
}
}
catch (ApplicationException)
{
rwl.ReleaseWriterLock();
}
}
我修改了部分代码(同样修改了Read部分),如果死锁,请求便超时,同时抛出ApplicationException异常,实际上并没有抛出异常。所以,我想应该不是死锁的问题。