Как переключиться между сборкой в ​​C # и собственной реализацией блокировки - PullRequest
0 голосов
/ 26 ноября 2018

В зависимости от входной переменной, передаваемой программе через командную строку, я хочу использовать разные блокировки (для школьного упражнения по параллелизму).Я хочу переключиться между сборкой в ​​C # lock и моей собственной реализацией TaS.

Реализация TaS взята из " Как мне реализовать свой собственный TaS-Lock в 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);
    }
}

В настоящее время я могу думать только о переключении между оператором блокировки и моей собственной реализацией блокировки:

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++;
    }
  }
}

Мне интересно, может ли встроенный оператор блокировки использоватьсобственные реализации блокировок или другие способы сделать это, , потому что я не думаю, что это правильный путь.Еще одна вещь, о которой я подумал, это переписать способ, которым встроенная блокировка C # была реализована в классе, и позволить этому классу и моему классу Tas_Lock наследовать один и тот же интерфейс (ILock), а затем инициализировать переменную ILock как один из обоих классов (как в вопросеприлагается).Мои проблемы с этим подходом заключаются в том, что в упражнении говорится об использовании оператора build in lock, а также кажется, что нужно заново изобретать колесо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...