我试图为C FFI库构建一个Rust包装器,但是底层库有一些不是线程安全的函数。要访问这些函数,我需要某种全局锁定来保护C库的状态。
有没有办法使用全局std::sync::RWLock
或类似的机制来控制对C库的访问?
各种明显的解决方案都失败了,因为Rust不允许使用非平凡的全局初始化器:
error: function calls in constants are limited to struct and enum constructors [E0015]
example.rs:18 static global_state_lock: RWLock<()> = RWLock::new(());
答案 0 :(得分:6)
extern crate sync;
use sync::mutex::{StaticMutex, MUTEX_INIT};
static LIBRARY_LOCK: StaticMutex = MUTEX_INIT;
fn access_global_resource() {
let _ = LIBRARY_LOCK.lock();
unsafe { call_thread_unsafe_c_api(); }
}
非常感谢#rust的arrrrrr1,他指出了我正确的方向。