C# 有没有办法锁定整数?整数不能与锁一起使用,因为它们是装箱的(并且仅锁定引用上的锁)。
场景如下:我有一个基于论坛的网站,具有审核功能。我想要做的是确保在任何给定时间只有一位版主可以审核帖子。为了实现这一点,我想锁定帖子的 ID。
到目前为止,我有一些想法(例如使用字典),但我正在寻找一种更好、更干净的方法。
有什么建议么?
我喜欢这样做
public class Synchronizer {
private Dictionary<int, object> locks;
private object myLock;
public Synchronizer() {
locks = new Dictionary<int, object>();
myLock = new object();
}
public object this[int index] {
get {
lock (myLock) {
object result;
if (locks.TryGetValue(index, out result))
return result;
result = new object();
locks[index] = result;
return result;
}
}
}
}
然后,要锁定 int 你只需(每次使用相同的同步器)
lock (sync[15]) { ... }
当两次给出相同的索引时,此类返回相同的锁对象。当新的索引到来时,它创建一个对象,返回它,并将其存储在字典中以供下次使用。
它可以很容易地更改为与任何struct
或值类型,或为static
这样就不必传递同步器对象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)