处理多个读取和单个写入

时间:2016-10-08 11:17:54

标签: c++ multithreading pthreads shared-memory

我对这个话题很新。每当我尝试一个接一个地完成一个过程时,它就会引起混淆,下一个过程会在执行第一个过程之前启动。

例如:我正在阅读共享内存,我希望下一个进程等到读取结束。但是在读完一些部分之后,写入过程就进入并改变了值。

我尝试使用互斥锁和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++;
}

1 个答案:

答案 0 :(得分:0)

由于fork()将创建正在运行的进程的副本,如果编写器在第二个进程中更改内存,读者将永远不会看到内存修改:

  • 线程共享内存
  • 处理过程(除非您与mmap共享内存)

那就是说,你的其他pthread函数调用似乎是正确的。

请参阅http://www.linuxprogrammingblog.com/threads-and-fork-think-twice-before-using-them