gpt4 book ai didi

pointers - 如何创建可以线程安全方式传递给 FFI 函数的未初始化指针?

转载 作者:行者123 更新时间:2023-11-29 08:17:31 24 4
gpt4 key购买 nike

我有一些 Rust 代码将指针传递给 FFI 函数,如下所示:

let mut mu = MaybeUninit::uninit();
let mut p = mu.as_mut_ptr();

let r = unsafe {
ffi_fn(&mut p)
};

这在一个线程上工作得很好,但我认为对于多个线程,MaybeUninit::uninit() 会同时向两个线程提供相同的指针,这会导致问题。

最佳答案

正如 Optimistic Peach 和 trentcl 在评论中指出的那样,正确的做法是检索空指针 ( playground example ):

let ptr: *mut i8 = std::ptr::null_mut();
let ptr_to_ptr: *const *mut i8 = &ptr;

适用与 C 相同的行为:即使指针本身为 NULL,指向 this 的指针也是内存中的有效地址。然后将由 FFI 边界的另一侧将此地址更改为 0x0 以外的地址,您将获得该更改(因为您也有对它的直接引用)。

关于pointers - 如何创建可以线程安全方式传递给 FFI 函数的未初始化指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58158069/

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