OpenMP предоставляет семафоры под термином «блокировка».Обычно они не используются, поскольку OpenMP предоставляет конструкции задач более высокого уровня, но если вы хотите сделать это самостоятельно, это может быть способом сделать явную блокировку / разблокировку с помощью Fortran.
PS Если вы хотите это сделатьиз Фортрана, вызвав код C, который у вас уже есть, что можно сделать с помощью привязки ISO C в Fortran 2003. Здесь много вопросов / ответов о том, как это работает.Я разработал декларации для вашей программы на Фортране, чтобы они соответствовали процедурам Си.Они сообщают компилятору Fortran, как вызывать подпрограммы C, используя соглашения о вызовах компилятора C.Они не проверены и могут нуждаться в отладке:
use iso_c_binding
interface semaphore_stuff
function get_semaphore () bind (C, name="get_sempaphore")
import
integer (c_int) :: get_semaphore
end function get_semaphore ()
function set_semaphore (sem_id, int val) bind (C, name="get_sempaphore")
import
integer (c_int) :: set_semaphore
integer (c_int), intent (in), value :: sem_id
integer (c_int), intent (in) value :: val
end function set_semaphore
subroutine decrement_semaphore (sem_id) bind (C, name="decrement_semaphore")
import
integer (c_int), intent (in), value :: sem_id
end subroutine decrement_semaphore
subroutine wait_semaphore (sem_id) bind (C, name="wait_semaphore")
import
integer (c_int), intent (in), value :: sem_id
end subroutine wait_semaphore
end interface semaphore_stuff