Я провел сегодня, глядя в беззаботные очереди. У меня многократная продюсерская ситуация с несколькими потребителями. Я применил для тестирования систему, использующую функцию блокировки SList под Win32, и она удвоила производительность моего сильно зависящего от потока кода на основе задач. К сожалению, я хочу поддерживать несколько платформ. Блокировка на нескольких платформах сама по себе не проблема, и я могу с уверенностью предположить, что я могу блокировать без проблем. Однако фактическая реализация меня теряет.Как создать незанятую очередь?
Большая проблема заключается в том, что вам нужно гарантировать, что список push/pop будет использовать только один вызов с блокировкой. В противном случае вы оставляете место для другого потока, чтобы зажать и повредить вещи. Я не уверен, как реализация microsoft работает под капотом и хотела бы узнать больше.
Может ли кто-нибудь указать мне на полезную информацию (платформа и язык довольно неактуальны)?
Добавлено к тому, что я хотел бы знать, можно ли его реализовать беззаконный вектор. У меня было бы огромное количество пользы :) Приветствия!
Редактировать: прочитав статью DDJ о траве, я вижу сокращенную очередь блокировки, которая очень похожа на ту, что у меня уже была. Однако я замечаю, что в конце есть документы, которые могут выполнять истинную блокировку очереди с использованием двойной операции сравнения и свопинга (DCAS). Кто-нибудь выполнил очередь, используя cmpxchg8b (или cmpxchg16b, если на то пошло)?
Я просто размышляю над этим вопросом (не прочитав документы), но вы можете использовать эту систему для одновременного обновления указателя головы и хвоста и, таким образом, избежать любых проблем с другим потоком, прыгающим между двумя атомными операциями. Однако вам все равно нужно получить следующий указатель главы, чтобы проверить, что против указателя хвоста, чтобы увидеть, только что изменили хвост. Как вы избегаете другого потока, изменяющего эту информацию, в то время как другой поток готовится сделать это сам? Как именно это реализовано беззаконным способом? Или мне лучше читать небезопасность, которая является исследовательской статьей? ;)
см. Http://stackoverflow.com/questions/1164023/is-there-a-production-ready-lock-free-queue-or-hash-implementation-in-c – Mark
Позор вам не ответил:) Я не нашел эту очередь и, кроме того, я не нашел статью о продюсерской/потребительской DDJ Herb Sutter :) Спасибо! – Goz