Я использую блокировки чтения/записи в Linux, и я обнаружил, что пытается обновить заблокированный объект до блокировок блокировки записи.pthreads: блокировки чтения/записи, обновление блокировки чтения для записи блокировки
т.е.
// acquire the read lock in thread 1.
pthread_rwlock_rdlock(&lock);
// make a decision to upgrade the lock in threads 1.
pthread_rwlock_wrlock(&lock); // this deadlocks as already hold read lock.
Я прочитал страницу человека, и это вполне конкретны.
Вызывающий поток может тупиковой, если в время вызова сделан он держит замок чтения-записи (будь то чтение или блокировка записи).
Каков наилучший способ обновления блокировки чтения блокировки записи в этих обстоятельствах. Я не хочу вводить гонку за переменную, которую я защищаю.
Предположительно, я могу создать еще один мьютекс, чтобы охватить освобождение блокировки чтения и приобретение блокировки записи, но тогда я действительно не вижу использования блокировок чтения/записи. Я мог бы просто использовать обычный мьютекс.
Thx
Boost.Thread имеет концепцию UpgradeLockable, но я сомневаюсь, что это очень полезно для вас, если ваш код уже проложен в pthreads. –
@Steve. Вы знаете, как это реализовано. Использует ли он отдельный мьютекс, который я рассматривал? Я полагаю, я мог бы скачать его и проверить: o) – ScaryAardvark
Нет, я не знаю, как Boost.Thread это делает, извините. –