Общие переменные для блокировки монитора с потоками и различными классами - PullRequest
1 голос
/ 11 февраля 2012

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

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

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

Спасибо!

Ответы [ 2 ]

1 голос
/ 11 февраля 2012

использовать открытые static поля, например,

public class Sync
{
    public static object LockObject = new object();
    //or any other sync mechanism 
    //AutoResetEvent,ManualResetEvent,Semaphore,CountdownEvent,Mutex etc.
}
0 голосов
/ 11 февраля 2012

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

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

...