У меня есть статический класс с несколькими методами, которые просто принимают в байтовый массив, анализируют его и возвращают структуру. Мне нужно вызвать эти методы из многих отдельных потоков. Нужно ли мне блокировать() или какую-то безопасность потоков в рамках методов? Я не могу обдумать это.C#: Нужно ли блокировать статический класс при доступе из отдельных потоков?
ответ
Если у вас есть метод reentrant, вам не нужны замки.
В общем, вам нужны блокировки, когда несколько потоков обращаются к общему ресурсу. Когда метод просто вычисляет что-то из своих аргументов без доступа к общему ресурсу, блокировки нечего.
по вашему определению, его пример будет * не * быть повторным. –
Вот почему я положил «Если» в начале моего ответа. Из описания, если его метод я думал, что он был повторным, но я не могу точно сказать, не глядя на код. – dtb
@John Почему вы так думаете? –
Да, lock
предотвращает одновременное использование нескольких потоков одним и тем же данным, что обычно ведет к несовместимому/непредсказуемому поведению.
Если ваши методы имеют общий ресурс, вам необходимо синхронизировать с ним доступ. В вашем случае нет общего ресурса, и поэтому нет необходимости блокировать что-либо.
Сделайте свой метод, используя статические переменные? – Betamoo
методы содержат переменные, но они не являются статическими. – JimDaniel