Я пытаюсь разработать следующий код без блокировки (С++ 11):
int val_max;
std::array<std::atomic<int>, 255> vector;
if (vector[i] > val_max) {
val_max =vector[i];
}
Проблема в том, что при большом количестве потоков (128 потоков) результат будет неверным, так как если, например, val_max=1, а три потока (с вектором[i] = 5, 15 и 20) будут выполнять код в следующая строка, и это будет гонка данных.
Итак, я не знаю, как лучше всего решить проблему с доступными функциями в С++ 11 (я не могу использовать мьютексы, блокировки), защищая весь код.
Какие-либо предложения? Заранее спасибо!
val_max
станет узким местом и убьет все приросты производительности, которые вы могли ожидать от многопоточного решения. Ваш алгоритм кажется ошибочным, но, поскольку вы не написали, чего пытались достичь, трудно помочь вам в его исправлении. - person ComicSansMS   schedule 11.12.2013