У всех потоков в boost::thread_group один и тот же поток в отношении boost::recursive_mutex
Я подозреваю, что из-за поведения моего кода, если у меня есть boost::thread_group, обращающийся к объекту, защищенному boost::recursive_mutex, то мьютекс не препятствует одновременному входу потоков в защищенную область изнутри группы.
Это сбивает с толку, потому что я вижу все потоки, перечисленные в отладчике (xcode).
Это известная проблема? Я не смог найти никакой документации по этому вопросу.
1 ответ
Boost thread_group - это группа потоков.
Все нити по определению различны и уникальны.
Итак, если ваш мьютекс не может... "mut-ex" (взаимно исключая), это указывает на ошибку программиста в другом месте.
По какой-то причине я бы предположил, что, возможно, ваши ожидания мьютексов (рекурсивные или нет) не точны (аналогично ожиданиям группы потоков)?
То, что вы, возможно, упустили, это то, что все стороны, которые получают доступ к общим объектам / должны / приобретать мьютекс во время этих обращений. Недостаточно, чтобы один поток "охранял" общие объекты, чтобы магически не пускать другие потоки.
Мьютексы - это кооперативное предложение. Термин "критическая секция" на самом деле немного лучше в этом отношении: вы "помечаете" критические секции в коде, а не "маркируете" критические данные (какими бы они ни были).