У всех потоков в boost::thread_group один и тот же поток в отношении boost::recursive_mutex

Я подозреваю, что из-за поведения моего кода, если у меня есть boost::thread_group, обращающийся к объекту, защищенному boost::recursive_mutex, то мьютекс не препятствует одновременному входу потоков в защищенную область изнутри группы.

Это сбивает с толку, потому что я вижу все потоки, перечисленные в отладчике (xcode).

Это известная проблема? Я не смог найти никакой документации по этому вопросу.

1 ответ

Boost thread_group - это группа потоков.

Все нити по определению различны и уникальны.


Итак, если ваш мьютекс не может... "mut-ex" (взаимно исключая), это указывает на ошибку программиста в другом месте.

По какой-то причине я бы предположил, что, возможно, ваши ожидания мьютексов (рекурсивные или нет) не точны (аналогично ожиданиям группы потоков)?

То, что вы, возможно, упустили, это то, что все стороны, которые получают доступ к общим объектам / должны / приобретать мьютекс во время этих обращений. Недостаточно, чтобы один поток "охранял" общие объекты, чтобы магически не пускать другие потоки.

Мьютексы - это кооперативное предложение. Термин "критическая секция" на самом деле немного лучше в этом отношении: вы "помечаете" критические секции в коде, а не "маркируете" критические данные (какими бы они ни были).

Другие вопросы по тегам