на главнуюВсе эхи RU.CPP
войти ?

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
Или коротким

FGHI-url этого письма: area://RU.CPP?msgid=2:5020/830.100+3b67a011