9 个稳定版本 (3 个主要版本)
4.1.1 | 2021 年 11 月 25 日 |
---|---|
4.0.0 | 2021 年 11 月 25 日 |
3.0.0 | 2021 年 11 月 24 日 |
2.0.0 | 2021 年 11 月 21 日 |
1.2.1 | 2021 年 11 月 21 日 |
#320 在 内存管理
每月下载量 115
26KB
426 行
Singlyton
在 Rust 中实现安全、单线程的全局状态。
存在调试断言以确保
- 借用检查(参见
RefCell
) - 线程安全(两个线程不能访问相同的单例)
- 未初始化内存的安全使用
为什么?
在 Rust 中,单线程全局状态有点像是一个幽灵
static mut
因其易于通过 别名 导致未定义行为而被强烈不建议使用。- 线程局部变量 在性能关键的环境中可能很慢,在单线程环境中使用毫无意义,并且可能不是所有平台上都可用
- 在单线程环境中绕过 Rust 的线程安全机制可能很丑陋、令人烦恼且不必要
使用方法
首先,将 singlyton
添加到你的 Cargo.toml
文件中作为项目的依赖项
[dependencies]
singlyton = "*"
单例
use singlyton::Singleton;
static SINGLETON: Singleton<&'static str> = Singleton::new("Hello");
debug_assert_eq!(*SINGLETON.get(), "Hello");
SINGLETON.replace("Test");
debug_assert_eq!(*SINGLETON.get(), "Test");
*SINGLETON.get_mut() = "Test 2";
debug_assert_eq!(*SINGLETON.get(), "Test 2");
SingletonUninit
use singlyton::SingletonUninit;
static SINGLETON: SingletonUninit<String> = SingletonUninit::uninit();
SINGLETON.init("Hello".to_string());
debug_assert_eq!(SINGLETON.get().as_str(), "Hello");
SINGLETON.replace("Test".to_string());
debug_assert_eq!(SINGLETON.get().as_str(), "Test");
*SINGLETON.get_mut() = "Test 2".to_string();
debug_assert_eq!(SINGLETON.get().as_str(), "Test 2");
依赖项
~20KB