【发布时间】:2011-12-19 17:03:41
【问题描述】:
谁能帮忙用fortran写一个信号量函数?我有多个进程正在运行,我必须使用信号量来同步它们。对于 C++ 等,可以找到这样的代码,但我在 fortran 中找不到任何这样的代码。
如果我可以从 fortran 代码中调用 C/C++ 函数,那就足够了,因为 C++ 信号量函数已经存在。
PS:(附加说明)这是适用于 C++ 的代码。我有一些 fortran 应用程序(作为标准基准测试的一部分),但没有信号量代码来同步它们。
int get_semaphore ()
{
int sem_id;
sem_id = semget(SEM_ID, 1, IPC_CREAT | 0666);
if (sem_id == -1) {
perror("get_semaphore: semget");
exit(1);
}
return sem_id;
}
int set_semaphore (int sem_id, int val)
{
return semctl(sem_id, 0, SETVAL, val);
}
void decrement_semaphore (int sem_id)
{
struct sembuf sem_op;
sem_op.sem_num = 0;
sem_op.sem_op = -1;
sem_op.sem_flg = 0;
semop(sem_id, &sem_op, 1);
}
void wait_semaphore (int sem_id)
{
struct sembuf sem_op;
sem_op.sem_num = 0;
sem_op.sem_op = 0;
sem_op.sem_flg = 0;
semop(sem_id, &sem_op, 1);
}
提前感谢您的帮助。
【问题讨论】:
-
我建议在您的问题中更具体地说明您想要完成什么。你已经尝试过什么了吗?您可以发布代码示例吗?您可能想查看 Fortran 的 MPI:mcs.anl.gov/research/projects/mpi
-
@IRO-bot 我已经给出了一个 c++ 代码片段。我不能使用 MPI,因为它不是并行代码:只是为了同步,需要信号量。除此之外,没有共享。
-
好的,希望有人能参与进来,这不是我真正的领域 :)
-
我还是不明白。您如何在需要信号量的 fortran 中进行多线程处理?没有本地 Fortran 方法可以访问此类低级系统内容。
-
@JonathanDursi 我正在使用 Marss 进行多核仿真,每个核心运行一个基准程序,它是 fortran 或 C 程序。为了在基准的感兴趣区域创建一个检查点,我想使用信号量。对于 C 语言的基准测试,我已经有了代码。只是fortran,我需要一个。如果我可以从 fortran 调用 C 函数,Fortran-C 混合编程可以工作。
标签: fortran semaphore shared-memory