我有一个c-library包裹着我想在OCaml中使用的fortran库。显而易见的解决方案是使用一些手写代码将c接口映射到ocaml例程来处理GC。
然而,事实证明,fortran库实现的算法将其输入作为EXTERNAL例程,即:
EXTERNAL RHS
这意味着输入基本上是由链接器传递的。 C-wrapper有一个很好的接口,收集结构中所有必需的输入,但实际上提供了该结构的一个全局实例,然后根据该全局实例定义所有缺少的外部例程。
作为一名功能性程序员,这对我来说就像一个反模式。由于我不想重写fortran代码,我的问题是:
是否有一种安全,惯用的方式来链接fortran库并避免全局状态冲突? C库是否可以提供fortran库的全局状态,而无需重写fortran代码?
如果不存在这样的方式,那么保护全局状态的C11(即独立于操作系统的)成语是什么?我需要一种全局锁,只允许通过一次发出的密钥进行访问。
我刚刚读到C11中的线程局部声明,这是一个选项吗?