Exemplo n.º 1
0
 internal static void EnterReadLock(string conn_str, int time)
 {
     if (_dic.ContainsKey(conn_str))
     {
         bool isSuccess = _dic[conn_str].ReadWirteLock.TryEnterReadLock(time);
         if (!isSuccess)
         {
             throw new LockTimeoutException("获取读锁超时");
         }
         return;
     }
     else
     {
         lock (obj)
         {
             if (_dic.ContainsKey(conn_str))
             {
                 _dic[conn_str].ReadWirteLock.TryEnterReadLock(time);
                 return;
             }
             _dic[conn_str] = new LockHelper.DbLock(conn_str);
             bool isSuccess = _dic[conn_str].ReadWirteLock.TryEnterReadLock(time);
             if (!isSuccess)
             {
                 throw new LockTimeoutException("获取读锁超时");
             }
         }
     }
 }
Exemplo n.º 2
0
 internal static void EnterWriteLock(string conn_str, int time)
 {
     if (_dic.ContainsKey(conn_str))
     {
         //先加写锁,用于控制当前进程,其他线程不可以使用
         bool isSuccess = _dic[conn_str].ReadWirteLock.TryEnterWriteLock(time);
         if (!isSuccess)
         {
             throw new LockTimeoutException("获取写锁超时");
         }
         //获取到写锁后,在重新获取经常互斥体,用于控制多进程只有一个线程可以访问
         isSuccess = _dic[conn_str].Mutex.WaitOne(time);
         if (!isSuccess)
         {
             throw new ProccessLockTimeoutException("获取进程级写锁超时");
         }
         return;
     }
     else
     {
         lock (obj)
         {
             if (_dic.ContainsKey(conn_str))
             {
                 _dic[conn_str].ReadWirteLock.TryEnterReadLock(time);
                 return;
             }
             _dic[conn_str] = new LockHelper.DbLock(conn_str);
             //先加写锁,用于控制当前进程,其他线程不可以使用
             bool isSuccess = _dic[conn_str].ReadWirteLock.TryEnterWriteLock(time);
             if (!isSuccess)
             {
                 throw new LockTimeoutException("获取写锁超时");
             }
             //获取到写锁后,在重新获取经常互斥体,用于控制多进程只有一个线程可以访问
             isSuccess = _dic[conn_str].Mutex.WaitOne(time);
             if (!isSuccess)
             {
                 throw new ProccessLockTimeoutException("获取进程级写锁超时");
             }
         }
     }
 }