DataBase/ClsLock.cs

(开头部分) 4KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

using System;
using System.Threading;

namespace XStart.DataBase {
    /// <summary>
    /// 使用using代替lock操作的对象,可指定写入和读取锁定模式
    /// </summary>
    public sealed class ClsLock {
        #region 内部类

        /// <summary>
        /// 利用IDisposable的using语法糖方便的释放锁定操作内部类
        /// </summary>
        private readonly struct Lock : IDisposable {
            /// <summary>
            /// 读写锁对象
            /// </summary>
            private readonly ReaderWriterLockSlim _lock;
            /// <summary>
            /// 是否为写入模式
            /// </summary>
            private readonly bool _isWrite;
            /// <summary>
            /// 利用IDisposable的using语法糖方便的释放锁定操作构造函数
            /// </summary>
            /// <param name="rwl">读写锁</param>
            /// <param name="isWrite">写入模式为true,读取模式为false</param>
            public Lock(ReaderWriterLockSlim rwl, bool isWrite) {
                _lock = rwl;
                _isWrite = isWrite;
            }
            /// <summary>
            /// 释放对象时退出指定锁定模式
            /// </summary>
            public void Dispose() {
                if (_isWrite) {
                    if (_lock.IsWriteLockHeld) {
                        _lock.ExitWriteLock();
                    }
                } else {
                    if (_lock.IsReadLockHeld) {
                        _lock.ExitReadLock();
                    }
                }
            }
        }

        /// <summary>
        /// 空的可释放对象,免去了调用时需要判断是否为null的问题内部类
        /// </summary>
        private class Disposable : IDisposable {
            /// <summary>
            /// 空的可释放对象
            /// </summary>
            public static readonly Disposable Empty = new Disposable();
            /// <summary>
            /// 空的释放方法
            /// </summary>
            public void Dispose() { }
        }
后面还有 53 行代码,解锁后查看完整代码

24 小时内免费解锁 3 个项目,之后 1 积分/个。 规则说明

AI 解读

登录后可用,每次 10 积分,解读结果公开显示在下面。

还没有人解读过这个文件。