We interfaced single-threaded C++ with multi-threaded Rust
3 months ago
- #Rust
- #Thread Safety
- #C++
- 这篇博客文章改编自Rust非大会上的演讲,讨论了单线程C++与多线程Rust的交互问题。
- Antithesis公司使用确定性虚拟机(Determinator)测试容器中的软件,用受控信号替代非确定性操作。
- 该模糊测试工具采用单线程C++编写,通过回调接口与控制器交互以发现程序缺陷。
- 研究人员为模糊测试工具添加了Rust接口,以便更轻松地实现新控制策略,同时引入了多线程和异步特性。
- 文章详述了结合C++与Rust的挑战,重点关注跨语言的线程安全与对象管理问题。
- 初期解决方案采用CppOwner和CppBorrower来跨线程安全管理C++对象,但存在垃圾回收效率低下的问题。
- 改进方案使用SendWrapper安全传递跨线程的C++对象,并确保在主线程正确销毁。
- 引入MainThreadToken机制,安全调用仅限主线程的C++函数。
- 将C++方法分类为SYNC和UNSYNC以明确线程安全要求,Rust封装器会强制实施这些约束。
- 该方法确保Rust编译器能强制执行线程安全,使得该接口达到生产环境要求。