C # обрабатывать два метода с одинаковой блокировкой по-разному - PullRequest
4 голосов
/ 25 апреля 2019

У меня есть класс с двумя методами (один экземпляр):

public class Example
{
    public void Connect()
    {
        // do stuff
    }

    public void DoSomething()
    {
        if (someCondition)
            Connect();

        // do stuff
    }
}

DoSomething разрешено одновременно нескольким потокам. Однако, если вызывается Connect, никакой поток не может вводить DoSomething и наоборот, поэтому Connect и DoSomething являются взаимоисключающими. DoSomething вызывается чаще, чем Connect.

Моей первой идеей было использование ReaderWriterLockSlim, однако, когда DomeSomething получает блокировку считывателя и ему необходимо вызвать Connect, он не может получить блокировку писателя в Connect.

Какой шаблон синхронизации наиболее подходит для достижения этой цели?

...