Я очень новичок в этой теме. Это сбивает с толку всякий раз, когда я пытаюсь выполнить один процесс за другим, следующий процесс запускается перед выполнением первого процесса.
Например: я читаю из общей памяти, я хочу следующий записывать процесс ждать, пока читать кончено. Но после прочтения некоторой части начинается процесс записи и изменяется значение.
Я пытался кодировать, используя mutex и cond_wait. Возможно, есть какие-то ошибки или я не знаю, как на самом деле работает cond_wait. Нужна помощь
мой фрагмент кода:
void create_reader()
{
pthread_mutex_lock(&mutex);
if (0 == fork()) {
reader();
exit(0);
}
readerID++;
r+=1;
pthread_cond_signal(&condition);
pthread_mutex_unlock(&mutex);
}
void create_writer()
{
pthread_mutex_lock(&mutex);
while (!r)
{
cout<<"waiting"<<endl;
pthread_cond_wait(&condition,&mutex);
}
if (0 == fork()) {
writer();
exit(0);
}
pthread_mutex_unlock(&mutex);
writerID++;
}
Как fork()
создаст копию запущенного процесса, если автор изменяет память во втором процессе, читатель никогда не увидит модификацию памяти самостоятельно:
mmap
)Тем не менее, ваши другие вызовы функций pthread кажутся правильными.
Увидеть http://www.linuxprogrammingblog.com/threads-and-fork-think-twice-before-using-them
Других решений пока нет …