互斥锁锁定并写入文件

时间:2019-04-09 15:06:20

标签: c++ pthreads mutex

如果条件满足,我正在尝试将一些数据写入文件。 包含所有这些功能的函数可以通过多个线程访问。

每次满足条件时,都会有四个变量被写为“ A,B,C,D”。经常发生的情况是,写入该数据文件的数据文件具有更多应在一行中包含的变量。

在通过gdb进行了一些调试之后,我意识到多个线程正在同时写入,这就是为什么我引入了pthread互斥锁的原因。

void Client::response(Sender* send, FILE *fp){
    pthread_mutex_lock(&lock);    

    if (status == ROI) {           

        if (condition) {
            RPS=serviceTime.size();
            double q90, q95, q99 = 0.0;
            std::sort(serviceTime.begin(), serviceTime.end());
            int q90 = (int)ceil(0.90 * double(RPS));
            int q95 = (int)ceil(0.95 * double(RPS));
            int q99 = (int)ceil(0.99 * double(RPS));
            q90 = serviceTime.at(Index90-1)/1e6;
            q95 = serviceTime.at(Index95-1)/1e6;
            q99 = serviceTime.at(Index99-1)/1e6;
            fprintf(fp, "%d, %.3f, %.3f, %.3f\n", RPS, q90, q95, q99);
            fflush(fp);
            serviceTime.clear();
        }
    }

    pthread_mutex_unlock(&lock);
}

我在这里想念什么?为什么多次写入同一文件?

1 个答案:

答案 0 :(得分:-2)

我建议您查看conditional vars(用于等待条件被验证),或者scoped locks(用于锁定范围内的资源,直到退出该范围)。