2012-02-11 2 views
1

У меня есть приложение C# Windows Я работаю над тем, где я запускаю разные классы в своем потоке (т. Е. Экземпляр Class1 в Thread 1, экземпляр класса 2 в Thread 2, и т.д).Общие переменные для блокировки монитора с потоками и различными классами

Я пытаюсь правильно приостановить/возобновить потоки, но я не могу понять, как делиться переменными блокировки для Wait/Pulse of Monitor между разными классами и потоками.

Кажется, у этого должен быть простой ответ, я просто не могу понять это. Я бы очень признателен за любую помощь!

Спасибо!

+3

'Кажется, что это должно иметь простой ответ' <- Я думаю, что вижу вашу проблему. – Hogan

+0

@ L.B. без полного понимания проблемы трудно комментировать «статические», но нет ничего в проблеме/вопросе, чтобы оправдать «публичное поле» (ах, теперь это относится к комментарию, который был удален) –

ответ

1

использование общественных static полей, для Исх.,

public class Sync 
{ 
    public static object LockObject = new object(); 
    //or any other sync mechanism 
    //AutoResetEvent,ManualResetEvent,Semaphore,CountdownEvent,Mutex etc. 
} 
+0

Тогда я мог бы просто вызовите Sync :: ManuelResetEventObj или что-то не из основного класса или любого потокового класса? – Harry

+0

Да 'Sync.LockObject' может использоваться в любом потоке или основном классе –

+0

Спасибо, и я могу сделать LockObject в массив для одновременного приостановки нескольких потоков? – Harry

0

монитор замок полезен для shnchronization, но при использовании в качестве сообщений API обычно только масштабируется до двух потоков, так как вы должны точно знать, где каждый должен знать, получает ли он сообщение.

Когда все становится сложным, AutoResetEvent или ManualResetEvent обычно более разумны, так как они менее критичны по времени: вы проходите через ворота независимо от порядка.

Смежные вопросы