Переменная | Описание |
m_cs | Охраняет доступ к остальным членам класса, обеспечивая опера ции с ними на атомарном уровне |
т_nActive | Отражает текущее состояние разделяемого ресурса. Если она равна 0, ни один поток к ресурсу не обращается. Ее значение, большее 0, со общает текущее число потоков, считывающих данные из ресурса. Отрицательное значение (-1) свидетельствует о том, что какой-то поток записывает данные в ресурс. |
m_nWaitingReaders | Сообщает количество потоков «читателей», которым нужен доступ к ресурсу. Значение этой переменной инициализируется 0 и увели чивается на 1 всякий раз, когда поток вызывает WaitToRead в то вре мя, как т nActive равна — 1. |
т_nWaitingWriters | Сообщает количество потоков-«писателей», которым нужен доступ к ресурсу. Значение этой переменной инициализируется 0 и увели чивается на 1 всякий раз, когда поток вызывает WaitToWrite в то вре мя, как т nActive больше 0, |
т_hsemWriters | Когда потоки - " писатели"> вызывают WaitToWrtie, но получают отказ в доступе, так как m_nActive больше 0, они переходят в состояние ожидания этого семафора. Пока ждет хотя бы один поток-«писа тель», новые потоки-«читатели» получают отказ в доступе к ресурсу. Тем самым я не даю потокам- «читателям" монополизировать доступ к этому ресурсу Когда последний поток-«читатсль», работавший с ресурсом, вызывает Done, семафор освобождается со счетчиком, равным 1, и система пробуждает один ждущий поток-описатель». |
m_hsemReaders | Когда потоки-«читатели" вызывают' WaitToRead, но получают отказ в доступе, так как т nActive равна - 1, они переходят в состояние ожидания этого семафора. Когда последний из ждущих потоков «писателей» вызывает Done, семафор освобождается со счетчиком, равным т nWaitingReaders, и система пробуждает все ждущие пото ки -«читатели». |