отображение библиотеки std для увеличения библиотеки - PullRequest
1 голос
/ 22 декабря 2011

В настоящее время я читаю книгу , в которой используются как библиотеки STD, так и библиотеки boost. Проблема в том, что Visual Studio 2010 еще не поддерживает поток STD, и мы должны зависеть от библиотеки наддува.

Таким образом, я ищу взаимно однозначное соответствие между библиотекой потоков std и библиотекой boost. Есть какой-то ресурс, который я использую для справки?

Например,

std::mutex
std::thread
std::lock_guard
std::unique_ptr
std::move
std::thread::hardware_concurrency()
std::thread::id
std::this_thread
std::shared_ptr         => boost::shared_ptr

Ответы [ 3 ]

2 голосов
/ 22 декабря 2011

Библиотека потоков Boost очень похожа на стандартную библиотеку потоков (которая была основана на библиотеке boost); Я думаю, что все это более или менее одинаково в Boost, включая mutex, thread, lock_guard, thread::hardware_concurrency() и thread::id из вашего списка.

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

Существуют реализации boost::move, но я не уверен, ведут ли они себя как std::move - вы должны использовать это, если ваш компилятор поддерживает это.

Я не думаю, что есть boost::unique_ptr. Возможно, вы можете эмулировать его с помощью boost::scoped_ptr, используя std::swap (или, возможно, boost::move), чтобы эмулировать ход.

Как вы говорите, boost::shared_ptr очень похож на std::shared_ptr.

2 голосов
/ 22 декабря 2011

Вы можете посмотреть на boost :: thread и связать классы (просто посмотрите на boost.org).

Но не забывайте, что они не являются точным эквивалентом: boost :: thread был реализован в C ++ 03, в то время как VS2010 предоставляет компилятор C ++ 11. Эти два языка различаются в терминах «возможностей», и библиотеки могут использовать преимущества C ++ 11 больше, чем C ++ 03.

Это делает std :: shared_ptr (и std :: unique_ptr) предпочтительным для boost :: shared_ptr и std :: auto: _ptr, где доступны функции C ++ 11.

Причина, по которой MS не поддерживает std :: thread и т. П. (Но то же самое относится и к версии GCC для Windows - MinGW), заключается в том, что std :: thread оборачивает старую функциональность pthread в C POSIX, но windows - внутренне - это не эквивалентна системе POSIX и не поддерживает некоторые примитивы (хотя она предлагает и другие).

MS начала с Win6 (Vista), чтобы предоставить функциональный эквивалент POSIX API, что сделало работу по отображению возможной и эффективной. Но это делает std :: thread доступным только для win6 + в мире, где все еще преобладают win5 + (XP / 2 & 3).

Прямо сейчас, boost :: thread - это имитатор C ++ 03 того, что стало std :: thread в C ++ 11, и доступно (хотя и не полностью эквивалентно с точки зрения функциональной гранулярности) для обоих POSIX (Unix / Linux) и Windows.

2 голосов
/ 22 декабря 2011

Вы можете использовать std::move, std::unique_ptr, std::shared_ptr в MSVC 2010.

Знаете ли вы, что вы можете использовать VC ++ 11 Developer Preview бесплатно?И там вы можете использовать объекты синхронизации STL.Посмотрите на вебинары Барточа Милевского о параллелизме

Вы можете увидеть сравнение boost::mutex, boost::thread с std::mutex, std::thread в следующем вопросе разумно заменить boost :: thread и boost :: mutex на c ++ 11 эквивалентов?

...