Я собираюсь рассказать вам, как делать вещи, вместо того, чтобы отвечать на вопрос. (Посмотрите на «X X проблема».)
Вы пытаетесь запретить двум потокам одновременно обращаться к одному и тому же файлу. Другими словами, доступ взаимно исключителен. «Мьютекс» предназначен для этого. В целом, легче найти помощь, если вы ищете то, что пытаетесь сделать (не допустить одновременного доступа двух потоков к одному и тому же ресурсу), а не ищете, как вы хотите это сделать (один поток ожидает другого).
Редактировать: Звучит так, будто вам действительно нужно много читателей, кроме одного писателя. Это, вероятно, вторая наиболее распространенная проблема синхронизации (после проблемы «производитель-потребитель»). Используйте pthread_rwlock
: читатели звонят pthread_rdlock
, а писатели звонят pthread_wrlock
.
Если вы делаете что-то столь сложное, вам действительно следует начать читать соответствующую литературу. Если вы думаете, что можете заниматься многопоточным программированием, занимаясь серьезным чтением, вы намного умнее меня и вам не нужна моя помощь. Я рекомендую "Маленькую книгу семафоров", которую можно бесплатно скачать ( источник ). Это не про pthreads, но это хороший материал. Проблема читателей-писателей, о которой вы спрашиваете, содержится в п. 4.2 в главе «Классические проблемы синхронизации» (черт, эта проблема даже упоминается в аннотации).
Многопоточное программирование - ЖЕСТКО с заглавными буквами и жирным шрифтом.