Общие переменные для блокировки монитора с помощью потоков и разных классов

У меня есть приложение C# для Windows, над которым я работаю, где я запускаю разные классы в их собственном потоке (например, экземпляр класса 1 в потоке 1, экземпляр класса 2 в потоке 2 и т. д.).

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

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

Спасибо!


person Harry    schedule 11.02.2012    source источник
comment
It seems like this should have a simple answer ‹-- Кажется, я вижу вашу проблему.   -  person Hogan    schedule 11.02.2012
comment
@ФУНТ. без полного понимания проблемы трудно комментировать статические, но в проблеме/вопросе нет ничего, что могло бы оправдать публичное поле (ах, теперь это относится к комментарию, который был удален)   -  person Marc Gravell    schedule 11.02.2012


Ответы (2)


использовать общедоступные поля static, например,

public class Sync
{
    public static object LockObject = new object();
    //or any other sync mechanism 
    //AutoResetEvent,ManualResetEvent,Semaphore,CountdownEvent,Mutex etc.
}
person L.B    schedule 11.02.2012
comment
Тогда я мог бы просто вызвать Sync::ManuelResetEventObj или что-то еще из основного класса или любого многопоточного класса? - person Harry; 11.02.2012
comment
Да Sync.LockObject можно использовать в любом потоке или основном классе - person L.B; 11.02.2012
comment
Спасибо, а я могу превратить LockObject в массив для одновременной приостановки нескольких потоков? - person Harry; 11.02.2012

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

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

person Marc Gravell    schedule 11.02.2012