1 c#
以下哪个代码更适合多线程访问该函数的情况
public ArrayList CallMe1()
{
ArrayList al = new ArrayList();
lock(al.SyncRoot)
{
al.Add("33");
al.Add("45");
return al;
}
}
public ArrayList CallMe2()
{
ArrayList al = new ArrayList();
Monitor.Enter(al);
al.Add("33");
al.Add("45");
Monitor.Exit(al);
return al;
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下没有共享状态,因此不需要同步.
但是,假设arraylist 是共享状态,则以下情况适用:
它们都是相同的(锁实现Monitor内部).
大多.
您的第二个版本需要在一个finally块中释放监视器,否则如果代码抛出异常,锁将永远不会被释放并导致应用程序死锁.
总之,使用第一个版本(lock (...) {... })以避免不必要的键入和可能的错误.