У меня есть какой-то многопоточный код, который обычно отлично работает, но время от времени он ломается. Я пытаюсь точно определить проблему, но использование OpenMP делает это более трудным (проблема не возникает в последовательном). Я знаю, что множественный доступ к переменной (условия гонки) часто приводит к сбою программы.
У меня есть список, разделенный между несколькими потоками, и мне любопытно, является ли push_back () в этом списке кандидатом на состояние гонки, поэтому иногда происходит сбой моей программы? Если да, есть ли рекомендации, как с этим справиться?
- Скорость имеет первостепенное значение
- Я знаю, что использование #pragma omp critical
решит условие гонки, но потенциально замедлит работу приложения (есть два списка, поэтому мне нужен критический, а не атомарный).
Единственная причина, по которой я не уверен в этом, заключается в том, что я выполнил пару тестов, используя контейнеры stl, но так и не получил тестовый код для сбоя.
Любые предложения будут с благодарностью!
Заранее спасибо,