Здравствуйте, remark, Вы писали:
R>Первый поток приходит в FreeMemory(), считывает какой-то current, потом успешно проверяет, что DequeueCount==0, потом засыпает.
R>Приходит второй поток и освобождает все элементы из freelist.
R>Далее эти же элементы выделяются повторно, добавляются в стек, удаляются из стека, и попадает опять во freelist.
R>Далее просыпается первый поток и успешно делает cas(&FreePtr, (TNode*)0, current), и удаляет все элементы, хотя DequeueCount сейчас может быть != 0. Возвращаемся к нашему разбитому корыту.
Не удивляйтесь, если Яндекс у вас иногда выдаёт 500 Internal Server Error