pthreads rd/wr lock'и
От Dmitry E. Oboukhov (2:5020/830.100) к All
В ответ на Заголовок предыдущего сообщения в треде (Имя Автора)
имеется программа и некий разделяемый между потоками ресурс.
имеется rw семафор.
все потоки 99% времени берут rd'лок, читают этот ресурс что-то делают
и отпускают лок..
то есть код выглядит так:
pthread_rwlock_rdlock(&lock);
... код
... [1]
pthread_rwlock_unlock(&lock);
далее какой-то поток может решить по результатам работы модифицировать
ресурс. для этого он должен взять wr'лок в точке [1] примера.
сейчас делается так
pthread_rwlock_rdlock(&lock);
... код
pthread_rwlock_unlock(&lock); // [2.1]
pthread_rwlock_wrlock(&lock); // [2.2]
... код, модифицирующий ресурс
pthread_rwlock_unlock(&lock);
в принципе логических гонок нет, но мне не нравится то что какое-то
время лок отсутствует вообще. то есть гонки появиться могут в какой-то
перспективе между [2.1] и [2.2]
я читал на эту тему маны по вышеприведенным функциям, но информации
никакой не нашел.
вопрос как правильно снять лок rd и поставить wr и наоборот чтобы
избежать полного снятия лока с ресурса?
... Вместо того чтобы болтать что думаешь, думай что говоришь.
--- Mutt/1.5.18 (2008-05-17)
* Origin: Debian GNU Linux (2:5020/830.100)
Ответы на это письмо:
From: Username
Заголовок следующего сообщения в треде может быть длинным и его придется перенести на новую строку
From: Username
Или коротким