2011-02-24 11 views
5

Mam dwa wątki w moim projekcie, powiedzmy wątek A i wątek B.Co to jest ekwiwalencja C# do mechanizmu sygnałowego systemu Linux?

Podczas gdy wątek B jest zajęty robieniem czegoś, chcę wysłać sygnał z wątku A do wątku B. Po wątku B odbiera sygnał, to natychmiast wykonuje odpowiednią obsługę sygnału. W Linuksie łatwo jest to zrobić z sygnałem. Aby uzyskać ten sam efekt, co powinienem zrobić z wątkami C#?

+0

Czy chcesz przerwać wątek B bez względu na to, co robi? A może chcesz, aby wątek B sprawdzał okresowo, aby sprawdzić, czy wysłano sygnał? –

+0

Chcę przerwać wątek B bez względu na to, co robi. W przeciwnym razie wszystkie urządzenia waithandle byłyby w porządku. – cooldfish

Odpowiedz

0

Nie można przerwać uruchomionego wątku dowolnie - tylko wątki, które blokują.

Spójrz na this explanation.

3

Nie wiem o signal w systemie Linux, ale można użyć ManualResetEvent, aby zasygnalizować inny wątek.

0

Co może być zainteresowany w dwie metody klasy Monitor, choć nie jestem właściwie pewien, że nadają się one dokładnie do swoich potrzeb:

Zobacz Pulse i Wait.

0

Świat .Net używa WaitHandles jest to klasa abstrakcyjna, która udostępnia metody pozwalające wątkom blokować, dopóki nie zostanie zasygnalizowane, i ujawnia metody sygnalizowania, że ​​wątki blokujące powinny "obudzić się".

Istnieje wiele konkretnych wdrożeń, takich jak AutoResetEvent, ManualResetEvent, Mutex i Semaphore.