Используйте алгоритм без блокировки для разделяемой памяти

Я хочу использовать lock-free algorithm для совместной памяти, чтобы избежать мьютекса. У меня есть некоторые процессы, которые совместно используют данные, использующие общую память. Если процесс блокирует мьютекс и аварийно завершает работу, все остальные процессы также аварийно завершают работу.

Я прочитал некоторые статьи, в которых реализован алгоритм без блокировки со связанным списком. Но в моей общей памяти я не могу определить структуру данных для использования в этом блоке памяти. У меня есть только указатель на этот блок.

Так что у меня нет идей применить алгоритм без блокировки в моей ситуации. Мне нужна помощь от вас. Спасибо и извините, если мой английский очень плохой.

4

Решение

Если процесс блокирует мьютекс и аварийно завершает работу, все остальные процессы также аварийно завершают работу.

Специально для этого варианта использования есть надежные мьютексы:

PTHREAD_MUTEX_ROBUST

Если процесс, содержащий поток-владелец надежного мьютекса, завершается при удержании блокировки мьютекса, следующий поток, который получает мьютекс, должен быть уведомлен о завершении возвращаемым значением [EOWNERDEAD] из функции блокировки. Если поток-владелец надежного мьютекса завершается, удерживая блокировку мьютекса, следующий поток, который получает мьютекс, может быть уведомлен о завершении с помощью возвращаемого значения [EOWNERDEAD]. Затем уведомленный поток может попытаться снова пометить состояние, защищенное мьютексом, как непротиворечивое с помощью вызова pthread_mutex_consistent (). После последующего успешного вызова pthread_mutex_unlock () блокировка мьютекса должна быть снята и может нормально использоваться другими потоками. Если мьютекс разблокирован без вызова pthread_mutex_consistent (), он должен быть постоянно недоступен, и все попытки заблокировать мьютекс завершатся неудачно с ошибкой [ENOTRECOVERABLE]. Единственная допустимая операция с таким мьютексом — это pthread_mutex_destroy ().

1

Другие решения

Других решений пока нет …

А ты уже прошел курс программирования? Супер скидка!
Прокачать скилл $$$
×