我对这个话题很新。每当我尝试一个接一个地完成一个过程时,它就会引起混淆,下一个过程会在执行第一个过程之前启动。
例如:我正在阅读共享内存,我希望下一个写进程等到读取结束。但是在读完一些部分之后,写入过程就进入并改变了值。
我尝试使用互斥锁和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 :(得分:0)
由于fork()
将创建正在运行的进程的副本,如果编写器在第二个进程中更改内存,读者将永远不会看到内存修改:
mmap
共享内存)那就是说,你的其他pthread函数调用似乎是正确的。
请参阅http://www.linuxprogrammingblog.com/threads-and-fork-think-twice-before-using-them