Po zakończeniu przetwarzania zrównoleglonego kodu wątki „włączają się” z powrotem do wątku głównego, który samotnie kontynuuje działanie programu i w innym miejscu może ponownie rozdzielić się na nowe wątki.
Domyślnie wszystkie wątki przetwarzają zrównolegloną część kodu niezależnie od siebie. Do podziału zadania pomiędzy wątki służą specjalne „konstrukcje podziału zadania”. Posługując się nimi można w OpenMP osiągnąć zarówno zrównoleglenie na poziomie zadań (ang. task parallelism), jak i na poziomie danych (ang. data parallelism).
Za przydział wątków do poszczególnych procesorów odpowiada środowisko uruchomieniowe, które stosuje algorytm uwzględniający m.in. aktualne obciążenie poszczególnych procesorów oraz całej maszyny. Liczba nowych wątków może być określona tuż przed uruchomieniem programu za pośrednictwem zmiennych środowiskowych lub w kodzie źródłowym za pomocą specjalnych funkcji. Deklaracje funkcji biblioteki OpenMP dla języków C i C++ znajdują się w pliku nagłówkowym "omp.h").