Я пытаюсь понять точную разницу между #pragma omp critical
и #pragma omp single
в OpenMP:
Определения Microsoft для них:
- Одиночный: Позволяет указать, что раздел кода должен быть выполнен в один поток, не обязательно основной поток.
- Критический: указывает, что код выполняется только в одном потоке время.
Таким образом, это означает, что в обоих случаях точная секция кода будет выполняться только одним потоком, а другие потоки не войдут в этот раздел, например. если мы что-то напечатаем, мы увидим результат на экране один раз, правильно?
Как насчет разницы? Похоже, что критические заботятся о времени исполнения, но не одиноки! Но я не вижу никакой разницы на практике! Означает ли это, что вид ожидания или синхронизации для других потоков (которые не входят в этот раздел) рассматривается в критическом состоянии, но нет ничего, что удерживало бы другие потоки в одном? Как это может изменить результат на практике?
Я ценю, если кто-нибудь может прояснить это мне, особенно на примере. Спасибо!