LINUX.ORG.RU

shared memory + cond variables + mutexes

 , ,


1

2

доброго дня!

пытаюсь протестирвоать следующую обвязку. Процесс Producer + процесс Consumer (независимые процесс). Обмен данными идет по shared memory с использованием мьютекса и условной переменной, которые запилены в структуре, которая помещаяется в shared memory.

Вопрос - почему когда умирает producer, mutex остается навечно залоченным и соответственно consumer не может его захватить?

Предполагаю, что это такая фича мьютексов, так как при умирании продюсера этот мутекс так и остается залоченным.

Как можно сделать так, чтобы при падении продюсера скидывать лок с его мьютекса?

Заранее спасибо,

Умирает в смысле падает или просто выходит нормально? В первом случае исправить баг, во втором использовать std::lock_guard

UVV ★★★★★
()

Тебе нужно установить атрибут robust на мьютексе (man pthread_mutexattr_setrobust), а затем отслеживать возвращаемое значение от pthread_mutex_lock (ключевое слово EOWNERDEAD), после чего восстановить консистентное состояние и позвать pthread_mutex_consistent на мьютексе — вот этим ни разу не пользовался, так что читай man и экспериментируй.

kawaii_neko ★★★★
()

внезапно mutex реализован как переменная в памяти. если она залочена, то всё.

ckotinko ☆☆☆
()
Ответ на: комментарий от zloy_starper

если процессы шарят память - то можно мьютексы с условными переменнами гонять между процессами, заморочился с этим, вместо семафоров

elmir_k
() автор топика
Ответ на: комментарий от UVV

в тестах тупо по SIGHUP допустим отваливается продюсер

elmir_k
() автор топика
Ответ на: комментарий от kawaii_neko

о, сэнкс за годноту! читаю у стивенса сейчас про это. буду тестить.

elmir_k
() автор топика
Ответ на: комментарий от kawaii_neko

pthread_mutex_lock

Фу, сишный интерфейс. Нужны объекты и RAII.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.