Иногда обыденные предметы дают узнать себя с неожиданной стороны..
Вот запустим к примеру обычный виндовый калькулятор и введём 1,+,2,*,3,= в инженерном, а затем в обычном виде. В инженерном ответ будет 7, а в обычном 9 - еще одна демонстрация того факта, что не всякое подходящее специалисту подойдет рядовому пользователю. (Кстати, не показывайте этот прикол иностранным товарищам - были прецеденты..)
На днях совершенно случайно выявил гадскую натуру CRITICAL_SECTION. По своей наивности я считал, что всё что залочено "внутри" lock-unlock есть единица исполнения, и повторный lock приведет лишь к ожиданию соответствующего unlock'a - как бы ни так. Внутри одной нити повторные lock'и будут просто проскакивать, причем это явно описано в MSDN: "Once a thread owns a critical section, it can make additional calls to EnterCriticalSection or TryEnterCriticalSection without blocking its execution.".
немного быдлокода:
1) обертка для критических секций http://www.everfall.com/paste/id.php?e4oiqnj5qmve
2) самопальная "критическая секция" на основе event'ов - вот она умеет лочиться даже внутри одной нити. http://www.everfall.com/paste/id.php?p9qoygyxzoks
пятница, 25 июля 2008 г.
Подписаться на:
Комментарии к сообщению (Atom)
Комментариев нет:
Отправить комментарий