во-первых, Thread.Sleep is not a busy wait. it's kind of an opposite of busy wait, if you know what I mean. пример мой intentionally примитивен; в настоящем коде, понятное дело, нужен какой-нибудь exponential fallback. который тем не менее таки будет использовать IsEmpty безо всякой дополнительной синхронизации.
а уж каким образом lock (queue) будет "гораздо более эффективен" is beyond me. всё строго наоборот, если ты в одном месте использовал lock (queue), то и везде должен будешь его пихать, вместо того, чтобы использовать потенциально более эффективные (потому что имеют доступ к private state) механизмы синхронизации *внутри* класса. например, какой-нибудь ReaderWriterLock (который queue, разумеется, не поможет, но вполне поможет какому-нибудь другому контейнеру, который читается чаще, чем пишется).
про привязку к стратегии квонтования которая трахает в жопу я ваще не понял.
(no subject)
Date: 2009-12-02 11:01 pm (UTC)а уж каким образом lock (queue) будет "гораздо более эффективен" is beyond me. всё строго наоборот, если ты в одном месте использовал lock (queue), то и везде должен будешь его пихать, вместо того, чтобы использовать потенциально более эффективные (потому что имеют доступ к private state) механизмы синхронизации *внутри* класса. например, какой-нибудь ReaderWriterLock (который queue, разумеется, не поможет, но вполне поможет какому-нибудь другому контейнеру, который читается чаще, чем пишется).
про привязку к стратегии квонтования которая трахает в жопу я ваще не понял.