根据通过命令提示符提供给程序的输入变量,我想使用不同的锁(用于并发性的学校练习)。我想在C#锁构建和我自己的TaS实现之间切换。
TaS实施来自“ How do I implement my own TaS-Lock in C#?”:
public class Tas_Lock
{
int L = 0;
public void Lock()
{
while (0 != Interlocked.CompareExchange(ref L, 1, 0)) { }
}
public void Unlock()
{
Interlocked.Exchange(ref L, 0);
}
}
我目前想到的唯一方法就是在lock语句和我自己的lock实现之间切换:
object obj = new object();
int counter = 0;
bool useOwnImplementation = true; //or false depending on input
Tas_Lock ownLock = new Tas_Lock();
//multiple threads that run simultaneously and call incrementGlobalCounter
incrementGlobalCounter() {
if (useOwnImplementation) {
ownLock.Lock();
counter++;
ownLock.Unlock();
} else {
lock (obj) {
counter++;
}
}
}
我想知道内置的lock语句是否可以使用自己的锁实现或其他实现方法,,因为我认为这不是正确的方法。我想到的另一件事是重写在类中实现C#的内置锁的方式,然后让该类和我的Tas_Lock类继承相同的Interface(ILock),然后将ILock变量初始化为两个类之一(例如在问题中提供)。我对此方法的担心是,该练习表明要使用build in lock语句,而且看起来也像是在重新发明轮子。