emk*_*emk 4 multithreading locking ffi rust
我正在尝试为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(());
Run Code Online (Sandbox Code Playgroud)
可以使用sync::mutex::StaticMutex以下方法解决此问题:
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(); }
}
Run Code Online (Sandbox Code Playgroud)
非常感谢#rust的arrrrrr1,他指出了我正确的方向.
| 归档时间: |
|
| 查看次数: |
440 次 |
| 最近记录: |