Комментарий Витора правильный.Трудно сказать, вызовет ли это проблемы или нет, потому что ответ зависит от многих факторов (т. Е. От структуры данных, от того, как вы обращаетесь к данным, размера кеша, типа используемого процессора и списка).продолжается).
Что я могу сказать, так это то, что вы можете или не сможете заставить это работать.Спецификация OpenMP, как и большинство других потоковых моделей, ничего не говорит о том, как или если модели будут «хорошо играть вместе».Например, хотя некоторые реализации OpenMP используют pthreads для базовой реализации, если реализация не выполнила какую-то работу, пользователь не может напрямую вызвать библиотеку pthreads и заставить ее работать вместе с OpenMP.Текущий пример этого - ошибка gcc 42616 (цикл OMP внутри pthread приводит к сбою).Другим примером является Intel, чей компилятор поддерживает множество параллельных моделей, но изо всех сил старается заставить их работать вместе.Поскольку вы еще не сказали, какой компилятор вы собираетесь использовать, все, что я могу сказать, это попробовать небольшой пример кода, чтобы увидеть, работает ли он, прежде чем совершать что-то большое.
Я пробовал что-то подобное впрошлое.Я использовал pthreads, которые затем использовали конструкции OpenMP.Я обнаружил, что для моего приложения все работает нормально.Каждый pthread считался исходным потоком при обнаружении параллельной области OpenMP.Затем среда выполнения OpenMP создала дополнительные потоки для региона и запустила регион.Поскольку большинство реализаций OpenMP не уничтожают потоки, а помещают их в свободный пул для повторного использования при обнаружении другого региона, накладные расходы выглядят хорошо - но тогда у меня было много работы в этом регионе.Так что это может сработать - но вы должны быть осторожны.