Я пытаюсь заменить boost::lockfree::queue
за std::queue
в этом примере websocket ++ https://github.com/zaphoyd/websocketpp/blob/experimental/examples/broadcast_server/broadcast_server.cpp
Похоже, это можно сделать, не меняя синтаксис, но удаляя boost::unique_lock
линий.
Однако, когда я смотрю на пример надстройки, в нем есть раздел кода, который проверяет наличие блокировки http://boost-sandbox.sourceforge.net/doc/html/lockfree/examples.html
Когда я просматриваю документы на lockfree::queue
это говорит об этом на is_lock_free()
http://boost-sandbox.sourceforge.net/doc/html/boost/lockfree/queue.html:
bool is_lock_free (void) const;
Предупреждение
Он только проверяет, являются ли начальный и конечный узлы очереди и
Фрилист может быть изменен без блокировки. На большинстве платформ
Вся реализация без блокировки, если это правда. Использование c ++ 0x-стиля
атомика, нет возможности предоставить абсолютно точный
реализация, потому что нужно будет проверить каждый внутренний узел,
что невозможно, если дальнейшие узлы будут выделены из
операционная система.Возвращает: true, если реализация без блокировки.
Я понятия не имею, что такое «атомика в стиле c ++ 0x», но я почти уверен, что c ++ 0x означает c ++ 11.
Я использую C ++ 11 и просто заменяю boost::lockfree::queue
за std::queue
Так не будет ли это реализовано без блокировки?
Нет. Комментарий «нет возможности предоставить абсолютно точную реализацию» относится к is_lock_free()
— то есть не гарантируется, что is_lock_free()
возвращает результат, который точно отражает, свободна ли реализация. Однако если is_lock_free()
возвращает true, вполне вероятно, что реализация без блокировки — но не совсем, чугун с гарантией.
Я понятия не имею, что такое «атомика в стиле c ++ 0x», но я почти уверен, что c ++ 0x означает c ++ 11.