Mutex блокировка и запись в файл - PullRequest
0 голосов
/ 09 апреля 2019

Я пытаюсь записать некоторые данные в файл, если выполняется условие.Функция, которая содержит все это, доступна из нескольких потоков.

Каждый раз, когда выполняется условие, есть четыре переменные, которые записываются как «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 голосов
/ 09 апреля 2019

Я бы предложил посмотреть либо условные переменные , которые используются для ожидания проверки условия, либо блокировки с областью действия , которые блокируют ресурсы в области действия, пока вы не выйдете из указанной области.

...