2010-06-14 2 views
4

У меня есть статический класс с несколькими методами, которые просто принимают в байтовый массив, анализируют его и возвращают структуру. Мне нужно вызвать эти методы из многих отдельных потоков. Нужно ли мне блокировать() или какую-то безопасность потоков в рамках методов? Я не могу обдумать это.C#: Нужно ли блокировать статический класс при доступе из отдельных потоков?

+0

Сделайте свой метод, используя статические переменные? – Betamoo

+0

методы содержат переменные, но они не являются статическими. – JimDaniel

ответ

3

Если у вас есть метод reentrant, вам не нужны замки.

В общем, вам нужны блокировки, когда несколько потоков обращаются к общему ресурсу. Когда метод просто вычисляет что-то из своих аргументов без доступа к общему ресурсу, блокировки нечего.

+0

по вашему определению, его пример будет * не * быть повторным. –

+0

Вот почему я положил «Если» в начале моего ответа. Из описания, если его метод я думал, что он был повторным, но я не могу точно сказать, не глядя на код. – dtb

+0

@John Почему вы так думаете? –

0

Да, lock предотвращает одновременное использование нескольких потоков одним и тем же данным, что обычно ведет к несовместимому/непредсказуемому поведению.

0

Если ваши методы имеют общий ресурс, вам необходимо синхронизировать с ним доступ. В вашем случае нет общего ресурса, и поэтому нет необходимости блокировать что-либо.