diff --git a/Apewer/Internals/Locker.cs b/Apewer/Internals/Locker.cs
index d44f34b..3cd6296 100644
--- a/Apewer/Internals/Locker.cs
+++ b/Apewer/Internals/Locker.cs
@@ -14,6 +14,15 @@ namespace Apewer.Internals
}
+ /// 整数锁。
+ internal sealed class Int64Locker : Locker
+ {
+
+ /// 获取整数的哈希值。
+ protected override int GetHash(long target) => target.GetHashCode();
+
+ }
+
/// 文本锁。
internal sealed class TextLocker : Locker
{
diff --git a/Apewer/NumberUtility.cs b/Apewer/NumberUtility.cs
index f74cf6a..52b6fa2 100644
--- a/Apewer/NumberUtility.cs
+++ b/Apewer/NumberUtility.cs
@@ -143,6 +143,53 @@ namespace Apewer
#endregion
+ #region 线程锁
+
+ static Int32Locker _int32_locker = new Int32Locker();
+ static Int64Locker _int64_locker = new Int64Locker();
+
+ /// 锁定数值,在锁中执行函数。
+ /// 要锁定的文本。
+ /// 要在锁中执行的函数。
+ ///
+ public static T Lock(this int value, Func inLock)
+ {
+ if (inLock == null) throw new ArgumentNullException(nameof(inLock));
+ return _int32_locker.InLock(value, inLock);
+ }
+
+ /// 锁定文本,在锁中执行函数。
+ /// 要锁定的文本。
+ /// 要在锁中执行的函数。
+ ///
+ public static void Lock(this int value, Action inLock)
+ {
+ if (inLock == null) throw new ArgumentNullException(nameof(inLock));
+ _int32_locker.InLock(value, inLock);
+ }
+
+ /// 锁定数值,在锁中执行函数。
+ /// 要锁定的文本。
+ /// 要在锁中执行的函数。
+ ///
+ public static T Lock(this long value, Func inLock)
+ {
+ if (inLock == null) throw new ArgumentNullException(nameof(inLock));
+ return _int64_locker.InLock(value, inLock);
+ }
+
+ /// 锁定文本,在锁中执行函数。
+ /// 要锁定的文本。
+ /// 要在锁中执行的函数。
+ ///
+ public static void Lock(this long value, Action inLock)
+ {
+ if (inLock == null) throw new ArgumentNullException(nameof(inLock));
+ _int64_locker.InLock(value, inLock);
+ }
+
+ #endregion
+
#region Restrict 约束值范围。
/// 约束值范围,若源值不在范围中,则修改为接近的值。