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