Обработка множественного чтения и одиночной записи

Я очень новичок в этой теме. Это сбивает с толку всякий раз, когда я пытаюсь выполнить один процесс за другим, следующий процесс запускается перед выполнением первого процесса.

Например: я читаю из общей памяти, я хочу следующий записывать процесс ждать, пока читать кончено. Но после прочтения некоторой части начинается процесс записи и изменяется значение.

Я пытался кодировать, используя 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++;
}

0

Решение

Как fork() создаст копию запущенного процесса, если автор изменяет память во втором процессе, читатель никогда не увидит модификацию памяти самостоятельно:

  • потоки разделяют память
  • процессы не (если вы не разделяете память с mmap)

Тем не менее, ваши другие вызовы функций pthread кажутся правильными.

Увидеть http://www.linuxprogrammingblog.com/threads-and-fork-think-twice-before-using-them

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector