Я пытаюсь заменить boost::lockfree::queue
на std::queue
в этом примере websocket++ https://github.com/zaphoyd/websocketpp/blob/experimental/examples/broadcast_server/broadcast_server.cpp
Похоже, это можно сделать, не меняя синтаксиса, но удаляя boost::unique_lock
строки.
Однако, когда я смотрю на пример boost, в нем есть раздел кода, который проверяет наличие блокировки 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, если реализация не блокируется.
Я понятия не имею, что такое «атомарность в стиле С++ 0x», но я почти уверен, что С++ 0x означает С++ 11.
Я использую С++ 11 и просто заменяю boost::lockfree::queue
на std::queue
, так что это не будет реализовано без блокировки?
std::queue
, если только у вас нет нескольких ядер и очень большого количества конфликтов. - person Cory Nelson   schedule 10.03.2013I have no idea what "c++0x-style atomics" are
говорит о boost::atomic, который на что опирается библиотека. - person Jesse Good   schedule 11.03.2013