2013-05-27 4 views
9

Каковы преимущества/недостатки использования многопоточных классов C++ 11 по сравнению с теми, которые были найдены в Boost? Я буду использовать только Linux, поэтому я не требую переносимости. Есть ли недостатки в одной из библиотек? Любые известные ограничения? Лучший синтаксис?C++ 11 Thread vs Boost Thread есть какая-то разница?

+1

Да, есть и такие: 1) [Что нужно, std :: thread или boost :: thread] (http://stackoverflow.com/questions/12365196/what-to-prefer-stdthread-or-boost-threads), 2) [std :: atom vs boost: atomic] (http://stackoverflow.com/questions/9551750/c-stdatomic-vs-boost-a tomic) и 3) [Почему стандартный комитет C++ отклонил boost :: shared_mutex] (http: // stackoverflow.com/questions/4659295/why-c0x-standard-Committee-reject-boostshared-mutex) – jogojapan

+0

@itwasntpete На самом деле, многое изменилось в Boost.Thread за последние 2 года. –

ответ

1

В целом, классы повышения - это только обертки вокруг функций/объектов, которые существуют в данной ОС. Их главным преимуществом является то, что boost содержит версии, написанные для большинства операционных систем, поэтому оболочка обеспечивает переносимость, которую исходные функции/объекты иногда нет.

Если вам больше не нужна поддержка, я бы настоятельно рекомендовал использовать стандартные потоки C++ 11.

Причины:

  • повышение не будет предоставлять больше, чем система позволяет

  • ваш код не будет иметь какой-либо обертки над головой (однако маленький это может быть)

  • поддержки наддува для C++ 11 потоков - это новая функция, и я опасаюсь, что это может привести к некоторым ошибкам в реализации boosts

  • вы не должны полагаться на библиотеки форсировки и сэкономите время компиляции и компоновки их и т.д.

  • вам не придется обновлять импульс, потому что вы не будете использовать его

Конечно, повышение имеет некоторые плюсы также:

  • многие знают, повысить и код (возможно) будет легче читать

  • , если вы решите, что вам нужно портировать код, который вы, возможно, легче (хотя C++ 11 является стандартным, так что где-то по линии все компиляторы реализовать)

+0

Привет, относительно «у вашего кода не будет каких-либо накладных расходов на обертку (сколь бы мала это ни была)», поэтому вы теоретически говорите, что классы C++ 11 будут более эффективными? – user997112

+0

@ user997112 AFAIK boost использует потоки C++ 11, если это возможно, поэтому для обертывания вокруг них должны быть некоторые накладные расходы. – Dariusz

+0

@ Dariusz нет, это не так, это 2 совершенно разных продукта. –

3

Стандартные потоки имеют преимущество в том, стандартизированный, поэтому переносимый в любую совместимую реализацию.

Библиотека потоков Boost более или менее идентична; стандартная библиотека была основана на этой библиотеке, и была предпринята попытка сделать Boost совместимой реализацией стандарта. Она имеет несколько расширений, которые могут быть полезны, в том числе:

  • join с тайм-аут
  • прерывания нити
  • групп потоков
  • дополнительных типов замков