如果条件满足,我正在尝试将一些数据写入文件。 包含所有这些功能的函数可以通过多个线程访问。
每次满足条件时,都会有四个变量被写为“ 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);
}
我在这里想念什么?为什么多次写入同一文件?