такое boost :: lockfree :: queue не без блокировки с c ++ 11?

Я пытаюсь заменить 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Так не будет ли это реализовано без блокировки?

9

Решение

Нет. Комментарий «нет возможности предоставить абсолютно точную реализацию» относится к is_lock_free() — то есть не гарантируется, что is_lock_free() возвращает результат, который точно отражает, свободна ли реализация. Однако если is_lock_free() возвращает true, вполне вероятно, что реализация без блокировки — но не совсем, чугун с гарантией.

8

Другие решения

Я понятия не имею, что такое «атомика в стиле c ++ 0x», но я почти уверен, что c ++ 0x означает c ++ 11.

  • C ++ 0x относится к стандартам C ++ 03 и / или C ++ 07 C ++.
  • C ++ 1x обычно относится к C ++ 11
  • c ++ 1y относится к преемнику c ++ 11.
-7

По вопросам рекламы [email protected]