Документы говорят, что блокировка из потока и разблокировка от другого rwlock приводит к неопределенному поведению. У меня есть массив и два потока, один из которых выделяет его и один освобождает его, это происходит в цикле, и в нем также есть некоторые потоки, которые читают/записывают, но они никогда не перекрываются, поэтому там никакой синхронизации не требуется. Проблема в том, что потоки чтения/записи по-прежнему пытаются использовать массив в таймфрейме между dealloc-alloc. Я думал об использовании блокировки чтения для потоков чтения/записи и блокировки массива для записи в потоке dealloc и разблокировки записи в потоке распределения. Но это приводит к неопределенному поведению, поскольку они происходят на разных потоках. Каким будет правильный подход в этом случае?pthread rwlock блокировка/разблокировка из разных потоков
0
A
ответ
2
Вам нужна переменная, которая хранит состояние. Вы можете защитить эту переменную блокировкой. Поэтому, когда поток должен проверять или изменять состояние, он получает блокировку, проверяет или изменяет состояние, а затем освобождает блокировку.
Да, я также думаю, что это единственное решение. Я пытался избежать проверки состояния каждый раз, когда я читаю/пишу. – Jelly
Не означает ли это решение ожидание-ожидание (по сравнению с [потенциальной] блокирующей семантикой rwlock)? – jhfrontz
Вы можете использовать, например, переменные состояния. –