Tag: unsafe perform io

unsafePerformIO和FFI库初始化

我正在为C中的库创建一个FFI模块,它希望在其他任何东西之前调用一次非重入函数。 这个调用是幂等的,但是有状态的,所以我可以在每个Haskell调用中调用它。 但它很慢并且由于不可重入而可能导致冲突。 那么这是使用unsafePerformIO的合适时机吗? 我可以将Bool包装在一个不安全的IORef或MVar中,通过忽略后续调用(全局隐藏IORef状态为False的调用)使这些初始化调用成为幂等的。 如果没有,这样做的正确方法是什么?