Безопасно ли использовать мьютекс C ++ в коде OpenMP - PullRequest
0 голосов
/ 28 ноября 2018

Безопасно ли использовать C ++ 11 std::mutex внутри кода OpenMP 4.5?Идея состоит в том, что я использую библиотеку журналов, которая защищает каждый std::cout, используя мьютекс C ++, чтобы выходные данные cout не шифровались при работе с несколькими потоками.Внутри моего кода OpenMP я могу использовать эту библиотеку журналов для печати некоторых сообщений.Насколько это безопасно?

1 Ответ

0 голосов
/ 28 ноября 2018

Нет, это небезопасно.

Только самая последняя версия OpenMP (5.0) даже «определяет» взаимодействие с функциями C ++ 11.Он делает это, говоря, что использование «библиотеки C ++ 11 [...] может привести к неопределенному поведению».

Практически, это может очень хорошо работать, но работа в «неопределенной области поведения» никогда не бываетжелательно.Вы можете найти реализацию, которая выходит за рамки стандарта и допускает такие комбинации.

Когда речь идет о мьютексах, рекомендуется придерживаться одной парадигмы и использовать мьютексы, предоставляемые OpenMP.

...