Поддерживает ли gcc unique_locks? - PullRequest
4 голосов
/ 15 декабря 2010


Я хотел использовать потоки в своем коде и думал, что будущие расширения C ++ 0x будут полезны, поскольку в конечном итоге они станут стандартом. Казалось, что это будущее, без необходимости использования дополнительных библиотек, таких как boost :: thread.
К сожалению, я не смог найти полезную информацию о том, какие функции в отношении потоков в настоящее время поддерживаются gcc. Я использую unique_locks, которые пока не работают. Это вывод компоновщика:

.build_debug/src/core/simulator.o: In function `Simulator::start(int, int, int, int)':
simulator.cpp:(.text+0x1fc): undefined reference to `_ZSt4lockISt11unique_lockISt5mutexES2_IEEvRT_RT0_DpRT1_'
.build_debug/src/core/simulator.o: In function `Simulator::resume()':
simulator.cpp:(.text+0x351): undefined reference to `_ZSt4lockISt11unique_lockISt5mutexES2_IEEvRT_RT0_DpRT1_'
.build_debug/src/core/simulator.o: In function `Simulator::pause()':
simulator.cpp:(.text+0x417): undefined reference to `_ZSt4lockISt11unique_lockISt5mutexES2_IEEvRT_RT0_DpRT1_'
.build_debug/src/core/simulator.o: In function `Simulator::stop()':
simulator.cpp:(.text+0x4cd): undefined reference to `_ZSt4lockISt11unique_lockISt5mutexES2_IEEvRT_RT0_DpRT1_'

Кто-нибудь понимает эти сообщения? Я предполагаю, что они имеют в виду использование unique_locks. Но почему возникают эти ошибки?

Мой исходный код похож на этот:
std::unique_lock<std::mutex> lkIntra(intraMtx, std::defer_lock); std::unique_lock<std::mutex> lkInter(interMtx, std::defer_lock); std::lock(lkIntra, lkInter);

РЕДАКТИРОВАТЬ: Я пытался скомпилировать это с GCC 4.3.X и 4.4.5. Линкер был g ++ 4.3, 4.4 и 4.5.

РЕДАКТИРОВАТЬ 2: Я просто пытался использовать буст-эквиваленты для std-threads. После добавления флага компилятора "-lboost_thread" компиляция сработала. Без которого процесс связывания приводил к подобным сообщениям об ошибках. Теперь мне интересно, нужно ли мне делать что-то похожее при использовании стандартных потоков (я уже пробовал "-lpthread").

1 Ответ

1 голос
/ 31 декабря 2010

Текущая версия разработки G ++ поддерживает это: http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a00729.html

Версия 4.5.1, кажется, не (по крайней мере, для меня на Mac OS Intel).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...