gpt4 book ai didi

c++ - 多线程 C++ 应用程序中的 Fortran 77 公共(public) block

转载 作者:搜寻专家 更新时间:2023-10-31 00:59:59 26 4
gpt4 key购买 nike

我开发了一个调用 Fortran 77 例程的 C++ 程序。主 C++ 程序可以多线程运行。但是,Fortran 77 例程碰巧隐藏了几个公共(public) block ,这些 block 在每次调用时都会根据其参数进行修改。

恐怕所有公共(public) block 都可能在多个线程之间共享,并且对这些 block 的并发访问可能会弄乱一切。

  • 第一个问题:我说得对吗?公共(public) block 是否会在多个线程之间共享?

  • 第二个问题:有没有简单的方法可以避免呢?重写 Fortran 例程似乎负担不起,我宁愿寻找一种方法,以便每个线程都有自己的所有公共(public) block 的拷贝(它们不大,应该可以快速复制)。我不知道编译选项是否有帮助,或者 OpenMP 是否可以帮助我。

最佳答案

是的,公共(public) block 是共享的。

在 OpenMP 中,可以将公共(public) block 指定为 THREADPRIVATE。然后每个线程动态地创建公共(public) block 的新实例。要从原始数据复制数据,请使用 COPYIN 说明符。另见 Difference between OpenMP threadprivate and private

基本语法是

!$OMP THREADPRIVATE (/cb/, ...)  

其中 cb 是公共(public) block 的名称。参见 https://computing.llnl.gov/tutorials/openMP/#THREADPRIVATE

关于c++ - 多线程 C++ 应用程序中的 Fortran 77 公共(public) block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32209196/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com