локировка потоков лишь с одним триггером на включение

У меня есть массив который должен читаться рядом потоков асинхронно, а так же есть один метод который дописывает данные в массив и иногда удаляет от туда данные. Мне нужно что бы как только данный метод сработал все чтецы становились в очередь и дожидались завершения модификаций с массивом. Подскажите как это сделать ?

Использовать лок или семафоры не могу так как в данном случае доступ к массиву будет синхронным, а мне нужно синхронизировать доступ к нему лишь в момент его модификации. Подкажите есть ли что то вроде лока или же семафира который мог бы включаться лишь из одного метода и высвобождаться лишь этим методом ? Пишу на C# .net core 5

Дополнено :

Есть массив типа double около 100 000 записей может и больше, копировать не вариант так как скорость очень важна.

Есть потоки по номерам {1,2,3,4} Все потоки асинхронно читают данный массив просто читают без права изменений. Их нельзя ставить в очередь иначе вся система полетит или как минимум будет не так функционировать как нужно...

Есть метод который добавляет данные в массив, и удаляет их. К примеру в результате его работы массив вырос на 6 новых эллементов.

Задача, поставить на паузу все потоки которые работают с данным массивом, что бы они дождались пока поток модифицирующий массив, не закончил с ним работать.

class MyObject
    {
        readonly List<double> data = new();
        
        public this[int ind] 
        {
            get
            {
                return data[ind];
            }
        }
        
        public void Modify(double[] newValues)
        {
            data.AddRange(newValues);
        }
    }

Это самый простой демонстрационный объект о котором идет речь. Вот мне нужно в индексаторе дожидаться пока не закончит работу метод Modify. И ждать лишь в том случае если метод Modify был запущен. Иначе все потоки смогут асинхронно брать значения через индексатор.


Ответы (0 шт):