【发布时间】:2014-11-21 16:02:16
【问题描述】:
我正在尝试为 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(());
【问题讨论】:
-
如果不使用不安全的代码,我认为这是不可能的。你应该通过锁,它是
Sync+Send,所以你不会有任何问题。
标签: multithreading locking rust ffi