Ramesh0809 Ответов: 2

Какой - нибудь механизм блокировки статических переменных ?


Есть ли какой-либо механизм для блокировки статической переменной, когда другой пользователь обращается к ней, чтобы преодолеть проблему concurreny.
Пример:- User1 доступ к статической переменной, User2 & User3 должен ждать, пока она не будет выпущена User1.
Пожалуйста помочь.

Что я уже пробовал:

Пробовал разные варианты, но статическая переменная требуется, но сталкивается с проблемой при одновременном использовании пользователей.

F-ES Sitecore

Единственный встроенный механизм блокировки статических методов-это когда они являются частью статического конструктора, и в этом случае .net гарантирует потокобезопасность вашего кода. Но за пределами этого все зависит только от вас. Как сказал OG в решении 1, вам нужно будет использовать механизм блокировки, чтобы обеспечить однопоточный доступ к вашим переменным. Возможно, вы захотите сделать это только при их установке.

OriginalGriff

Зависит от того, что это за переменная: например, если это список, вы хотите заблокировать его, когда вы что-то делаете с ним, а не просто устанавливаете его. Например, если один поток находится на полпути к удалению элемента, и вы пытаетесь получить определенный элемент, это может привести к проблемам.

F-ES Sitecore

Хорошая точка.

2 Ответов

Рейтинг:
0

OriginalGriff

Обычно использование статической переменной-хороший признак того, что ваш проект несовершенен, но они очень иногда необходимы.

Самый простой способ сделать это-использовать оператор Lock (Справочник по c#) | Майкрософт документы[^] - но имейте в виду, что вы будете нести ответственность за любые смертельные объятия или подобные проблемы.

Я бы внимательно посмотрел на ваш код / дизайн и почему именно вы используете статические переменные для многопользовательского доступа вместо себя.


Рейтинг:
0

Amine Touahria

Вы можете использовать Взаимное исключение класс.

Проверьте этот пример : https://www.c-sharpcorner.com/UploadFile/1d42da/threading-with-mutex/