gpt4 book ai didi

multithreading - 同步访问 Rust 中的 FFI 调用(通过全局 RWLock?)

转载 作者:行者123 更新时间:2023-11-29 07:53:20 26 4
gpt4 key购买 nike

我正在尝试为 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::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(); }
}

非常感谢#rust 上的 arrrrrrr1,他为我指明了正确的方向。

关于multithreading - 同步访问 Rust 中的 FFI 调用(通过全局 RWLock?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27065466/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com