Załóżmy, że mam klasę statyczną ze statyczną metodą. Wiele wątków może jednocześnie wywoływać tę metodę statyczną.
OK.
Czy istnieje potencjał do wyścigu w tych okolicznościach: a - jeśli metoda zależy tylko od zmiennych lokalnych
Tak, istnieją potencjalne warunki wyścigu.
b - jeśli metoda zależy od zmiennych lokalnych i pól członkowskich
Tak, istnieją potencjalne warunki wyścigu.
Odpowiedzi na (a) i (b) są konsekwencją bardziej ogólną zasadę, a mianowicie jest zawsze potencjał warunkach wyścigowych dowolnym czasu nazywamy dowolny metoda z wielu wątków.Na przykład, program ten zakleszczenia:
class MyClass
{
static MyClass()
{
// Let's run the initialization on another thread!
var thread = new System.Threading.Thread(Initialize);
thread.Start();
thread.Join();
}
static void Initialize()
{ }
static void Main()
{ }
}
Nie ma pola dwie metody, które robią absolutnie nic, a pojedyncza zmienna lokalna, która jest dostępna tylko w jednym wątku. A jednak natychmiast i konsekwentnie zakleszcza. (Czy wiesz, dlaczego? Zobacz http://ericlippert.com/2013/01/31/the-no-lock-deadlock/, aby uzyskać więcej informacji na temat tego programu.)
Wygląda na to, że szukasz gwarancji, że twój program będzie bezpieczny dla wątków, jeśli statyczne metody nie będą miały dostępu do pól. Nie ma takiej gwarancji. Twój program jest chroniony wątkami tylko wtedy, gdy zapiszesz go jako bezpieczny dla wątków.
Edytuj pytanie, aby podać pseudo kod lub próbki, aby podać więcej informacji. Dzięki. – Gray
Nic z tego nie ma żadnego skutku w ten czy inny sposób. Liczy się tylko to, czy wiele wątków używa tego samego obiektu. –
Każde wywołanie metody ma własną kopię zmiennych lokalnych, więc mam 99% pewności, że użycie zmiennych lokalnych nie spowoduje wygenerowania warunku wyścigu. Używanie pól elementów będzie jednak. – aboveyou00