Пишу на qt под иксы. Проблема с тредами. Создание тредов: Code: void MainWindow::start() { int threadsCount = Settings::get("threads_count").toInt(); QThread *threads[threadsCount]; for (int i = 0; i < threadsCount; i++) { QThread *validator = new Validator(i, statistic); threads[i] = validator; threads[i]->start(); } } Обработка. Code: void Validator::work() { int increase = Settings::get("threads_count").toInt(); for (int i = this->threadNumber; i <= Statistic::getTotalMailsCount(); i += increase) { mutex.lock(); statistic->increaseCheckedMailsCount(); qDebug() << this->threadNumber << i; mutex.unlock(); //sleep(1); } } Есть общее кол-во итераций, есть кол-во тредов, в которых эти итерации надо обработать. statistic->increaseCheckedMailsCount(); - Делает инкремент операции. Как раз проблема в этом методе. на 17к итераций он может не сработать раз 30, с мьютексом меньше (хотя по идее должны и без него так же быть...). Смотрел вывод консоли - треды срабатывают нормально. Проблему я представляю как невозможность одновременного доступа к переменной через метод, но как её решить? В реале прога будет работать медленнее, но всё же не хотелось чтобы какая-то часть её работала неправильно хоть даже в теории. Зы. чем больше тредов, тем собсна больше пропусков.
Без какой-либо блокировки все вышеописанное будет иметь место. Судя по коду, проблем никаких быть не должно, но это только в предоставленном тобой участке. P.S. Логичней было бы использовать мьютексы в теле функции increaseCheckedMailsCount(), а не перед её вызовом.