Я редактирую здесь полноценный ответ, чтобы попытаться ответить на дополнительные вопросы, заданные в качестве комментариев к ответу lucas1024.
О значении «разделяемая память»
С одной стороны, у вас есть программно-ориентированное (т. Е. Ориентированное на ОС) значение разделяемой памяти: способ, позволяющий различным процессам получать доступ к одному и тому же куску памяти (т.е. ослаблять обычное ограничение ОС, которое задано процесс не должен вмешиваться в память других процессов). Как указано на странице википедии, API разделяемой памяти POSIX является одной из реализаций такого средства. В этом случае не имеет особого смысла говорить о потоках (ОС вполне может предоставлять общую память, даже не предоставляя потоки).
С другой стороны, у вас есть аппаратно-ориентированное значение «разделяемая память»: аппаратная конфигурация, при которой все процессоры имеют доступ к одному и тому же фрагменту ОЗУ.
О значении "нить"
Теперь мы должны устранить неоднозначность другого термина: «нить». ОС может обеспечить способ иметь несколько параллельных потоков выполнения в процессе. Потоки POSIX являются реализацией такой функции.
Однако в спецификации OpenMP есть свои определения:
поток: Объект выполнения со стеком и связанной статической памятью, называемый
Приватная память.
Поток OpenMP: Поток, управляемый системой времени выполнения OpenMP.
Такие определения хорошо согласуются с определением, например, Потоки POSIX и большинство реализаций OpenMP действительно используют потоки POSIX для создания потоков OpenMP. Но вы можете представить реализации OpenMP поверх ОС, которые не предоставляют потоки POSIX или эквивалентные функции. Такие реализации OpenMP должны были бы внутренне управлять потоками выполнения, что достаточно сложно, но вполне выполнимо. В качестве альтернативы они могут отображать потоки OpenMP на процессы ОС и использовать какую-то функцию «разделяемой памяти» (в смысле ОС), чтобы позволить им совместно использовать память (хотя я не знаю, чтобы это делала любая реализация OpenMP).
В конце концов, единственное ограничение, которое у вас есть для реализации OpenMP, - это то, что все процессоры должны иметь возможность совместно использовать доступ к одной и той же центральной памяти. То есть программы OpenMP должны работать в системах с «общей памятью» в аппаратном смысле. Однако потоки OpenMP не обязательно должны быть потоками POSIX одного и того же процесса ОС.