2013-09-09 2 views
2

В настоящее время у меня есть код, написанный с использованием библиотеки поддержки потоков C++ 11: http://en.cppreference.com/w/cpp/threadБезопасно ли использовать boost :: lockfree с библиотекой поддержки потоков C++ 11?

Мне интересно, можно ли смешать этот код с boost :: lockfree. http://www.boost.org/doc/libs/1_54_0/doc/html/lockfree.html

То есть, я хочу, чтобы несколько C++ 11 std :: threads одновременно получали доступ boost :: lockfree :: queue. Вероятно, было бы безопаснее заменить поток C++ 11 на boost :: thread, но если бы я мог свести к минимуму изменение кода, было бы неплохо.

+0

Ответ на короткий вопрос: «Вероятно»: каждая свободная структура данных и алгоритм, которые я знаю, не полагаются на все детали потоковой модели, так как они полагаются на примитивы процессора. Длинный ответ - «данно», потому что это, возможно, будет зависеть от некоторого глубокого mojo на вашем языке и ускорить реализацию. На платформе с отсутствием примитивов параллелизма (например, CAS) вы можете представить себе кучу вещей, которые реализуются с помощью каких-то серьезных сумасшедших способов, а 'boost' и' std' выбирают разные сумасшедшие способы. Вы программируете на относительно стандартном оборудовании? – Yakk

+0

Является ли переносимость проблемой? Если да, то вы его используете холодно. Если разработка находится в Windows, вы можете использовать библиотеки параллельных шаблонов. – Jagannath

ответ

4

В настоящее время я работаю над реализацией threadpool, используя блокировку и std :: thread, однако я использую атомный алгоритм Joe Seigh, а не версию boost. Я не вижу причин, по которым ускоренная версия будет не в порядке, я изучил источник и, кажется, отличная реализация для меня.