Все потоки в boost::thread_group используют один и тот же поток в отношении boost::recursive_mutex

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

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

Это известная проблема? Документации на него я не нашел.


person Jason Harrison    schedule 04.02.2015    source источник


Ответы (1)


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

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


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

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

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

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

person sehe    schedule 04.02.2015
comment
Точно: мьютекс не защищает ни переменную, ни значение, ни пространство памяти. Mutex — это набор дверей с одним единственным ключом. Вы ставите двери вокруг области, которую хотите защитить, и гарантируете, что только 1 поток может открыть любую дверь в любой момент. - person Félix Cantournet; 05.02.2015
comment
Я думаю, что мое понимание мьютексов достаточно точное. - person Jason Harrison; 05.02.2015
comment
@JasonHarrison Хорошо! Конечно, просто догадка, основанная на нескольких вещах, которые вы упомянули (это было двусмысленно, поэтому я верю вам, если вы говорите, что верите). Не стесняйтесь игнорировать эту часть. - person sehe; 05.02.2015