@ Марсело абсолютно прав, и я бы хотел немного расширить его ответ.
ОС будет определять, где и когда потоки составляют выполнение приложения, в зависимости от того, что еще происходит в системе, и от доступных ресурсов. Каждое приложение будет запускаться в своем собственном процессе, и этот процесс может иметь или сотни потоков . ОС (Windows, Linux, Mac и т. Д.) Будет переключать контекст выполнения процессорных ядер, чтобы гарантировать, что все приложения и службы получат кусок пирога.
Что касается доступа ввода-вывода к таким вещам, как ОЗУ, которое физически контролируется контроллером NorthBridge , который находится на вашей материнской плате. Каждый процесс (не процессор!) Будет иметь выделенный объем ОЗУ, с которым он может работать, который может расширяться или сокращаться в течение срока службы приложения ... это, конечно, ограничено количеством доступных ресурсов в системе, а также стоит отметить, что ОС позаботится об обмене запросами оперативной памяти, помимо физической доступности к диску (т. е. виртуальной оперативной памяти).
С другой стороны, вам потребуется координировать доступ к памяти в вашем приложении с помощью критических секций и других механизмов синхронизации потоков.
OpenMP - это библиотека, которая помогает вам писать многопоточные приложения parellel и упрощает синтаксис синхронизации потоков .... Я бы прокомментировал больше, но прошло довольно много времени с тех пор, как я его использовал, и я уверен, кто-то может дать лучшее объяснение.