多线程的列子一般这样的
public class AccessControl()
{
    private static object privateObjectLock = new object();
    private string dbname,tablename;   //参数:文件名
    public AccessControl(string dbname,string tablename)
    {
         this.filename = filename;
    }
    public static AccessResult()
    {
       lock(privateObjectLock)
       {
          //数据库操作语句       }
    }
}
如果我在调用的时候new多个AccessControl类的实例(因为参数不同),  lock(privateObjectLock)还能起到效果吗?比如
for (int i=0;i<=100;i++)
{
    AccessControl ac = new AccessControl(dbName,table[i]);
    Thread t = new Thread(new ThreadStart(ac .AccessResult));
    t.start();
}
 

解决方案 »

  1.   

    能,静态的object,不论多少个实例都是唯一的
      

  2.   

    你每次都 同通过private static object privateObjectLock = new object();
    这句给每一个新建的线程新建了一个对象 而每次这个对象 只对当前线程有效! 所以你那样写是没
    有意义的!  除非把AccessControl ac = new AccessControl(dbName,table[i]);
    这句放在循环外面! 那么他们lock的都是同一个privateObjectLock对象了!
      

  3.   

    static object privateObjectLock,静态的,怎么会有新对象?这个lock是百分之百起作用的。
      

  4.   

    可以没问题,因为 privateObjectLock 是一个静态实例。不过你new多少个AccessControl 它都只有一份实例。