LINUX.ORG.RU

Блокировка (pthread_mutex_lock)


0

0

суть в следующем: есть прога которая создает 3 птока 1-принимает запросы 2-обрабатывает запросы 3-пишет данные в файл. второй поток в зависимости от нагрузки может плодится (точнее первый поток плодит вторые). потоки передают друг другу данные через буферы. на каждый буфер есть флаг 1-буфер занят каким-либо потоком 0-буфер свободен. в принципе одновременный доступ двух и более потоков к одному буферу исключен. НО при большой назрузке растет вероятность того, что два потока могут одновременно обратиться к флагу, после чего прога благополучно может рухнуть. Так вот вопрос: 1:есть ли какая либо функция которая может закрыть всем потокам кроме вызываюшего доступ к определенным данным ? (ну скажем передаю адрес и размер массива и он блокиреутся для других) 2: в описании на pthread_mutex_lock написано, что он блокирует исключающий семафор. что это за хрень я так и не врубился. попробывал опытным путем и эта функция заблокировала мне вызывающий ее поток, а такая фигня меня не устраивает. можно ли этой функцией заблокировать все потоки кроме вызывающего и как ?? 3: если у кого нибудь была подобная проблема, расскажите как ее решили?(если не секрет)

anonymous

Используй условные переменные man pthread_cond_init

anonymous
()

Там же все просто.

pthread_mutex_lock - блокирует мьютекс (если мьютекс уже заблокирован, то поток блокируется, пока его не разблокирует) pthread_mutex_unlock -разблокирует мюьеткс.

Юзать так. pthread_mutex_lock(&mutex) //Обращение к общим данным (массивы, буфферы и т.п.) ... pthread_mutex_unlock(&mutex)

Там еще куча других функций есть. Почитай Advanced Linux Programming. Там все очень доходчиво написано и с примерами.

Dead ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.