Разработка, производство и продажа радиоэлектронной аппаратуры
|
Требуется программист в Зеленограде - обработка данных с датчиков; ColdFire; 40 тыс.
e-mail: jobsmp@pochta.ru
|
я исходил и исхожу из того, что в качестве альтернативы мьютексу Вами рассматривалась критическая секция (видимо, с вызовом TryEnter...) и была отклонена по причине "слишком больших накладных расходов". Следовательно, это синхронизация нитей в одном процессе. Следовательно, задача - иногда поллить ресурс, и если он вдруг оказался свободным - захватить его, и пусть другие его поллят или ждут. Следовательно, для облегчения такого поллинга можно добавить в программе флаг занятости ресурса, который опрашивать при поллинге, и только тогда, когда он сброшен - пытаться захватить ресурс обращением к более тяжеловесными примитивам синхронизации и последующим взведением этого флага. И есть вероятность, что воспользовавшись InterlockedCompareExchange для захвата этого флага можно было обойтись вообще без тяжеловесной синхронизации в высокоприоритетной нити. Ну разве что для информирования низкоприоритетной нити о наличии новой работы - вызовом SetEvent, причем, только тогда, когда она реально ждет без дела (другой флаг ;) И, кстати, без риска инверсии приоритетов.
Составить ответ | Вернуться на конференцию
Ответы