如何实现安全的全局 Instant?

乔什·韦恩斯坦

在 Rust 中,我试图找到一种方法来安全地设置全局Instant. Instant可能是单例的一种独特形式,因为它无法通过常量函数调用来初始化自己。尝试初始化static Instant通孔会Instant::now()导致以下错误:

error[E0015]: calls in statics are limited to constant functions, tuple structs and tuple variants
  --> src/main.rs:45:24
   |
45 | static EPOCH:Instant = Instant::now();
   | 

               ^^^^^^^^^^^^^^

因此,我正在寻找一种理想的安全方法来执行上述操作。对于上下文,我已经有办法使用unsaferust来做到这一点

use std::time::{Instant};
use std::mem::{self, MaybeUninit};

static mut MONOTONIC_EPOCH:MaybeUninit<Instant> = MaybeUninit::<Instant>::uninit();

fn set_epoch() {
    unsafe {
        MONOTONIC_EPOCH.as_mut_ptr().write(Instant::now());
    }
}

在我的用例中,我需要全局单调时间点,可用于跟踪自程序执行中的某个时间点以来的时间。因此,全局Instant在第一次设置后不需要是可变的。可以假设这种初始化在用例中可以保证在只有一个线程处于活动状态时发生。

注意:我确实需要一种方法来控制何时发生初始化Instant

网波

您可以根据需要使用任何一个或多个版本:once_cell::Lazysyncunsync

use std::time::{Instant};
use once_cell::sync::Lazy;

static EPOCH: Lazy<Instant> = Lazy::new(Instant::now);

操场

如果要处理初始化完成的时间和地点,请OnceCell改用:

use std::time::{Instant};
use once_cell::sync::OnceCell;

static EPOCH: OnceCell<Instant> = OnceCell::new();

fn main() {
    let instant = EPOCH.get_or_init(Instant::now);
    println!("{:?}", *instant);
}

操场

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从Instant转换为LocalDate

Instant Apps:如何添加外部库?

我如何使用Powermock存根Instant对象

如何将LocalDate转换为Instant?

如何将Instant转换为LocalTime?

如何从Instant.now()获取DayOfWeek

如何将Crashlytics与Android Instant Apps集成?

Java 8:使用Instant,如何检索ZoneId信息

java.time.Instant 是如何计算纳秒的?

如何安装Instant Messaging应用程序IP Messenger?

如何在Datomic db.type / instant中插入日期?

如何在Java中初始化Instant

如何在AndroidStudio 2.0中激活Instant Run

如何在 Facebook Instant Game SDK 中使用模板属性

Java:如何将Instant类型转换为XMLGregorianCalendar类型?

Android Instant Apps:如何调试即时应用程序?

如何为Instant Apps组织应用程序类

如何从纪元微秒或纳秒创建Java Instant?

如何使用React在FB Instant Games中正确加载图像?

如何在Amazon Prime Instant Video中观看视频?

如何在 Android Studio 4.0 中禁用 Instant Run?

如何在 Django 项目中识别 Oracle Instant Client?

由于内容安全政策,Facebook Instant Game无法从cloudflare.com加载脚本

如何实现reactjs全局配置

如何使用Java将String日期和String时间组合为单个Instant datetime?

如何使用Java DateTimeFormatter舍入到最知名的INSTANT_SECONDS值?

如何使用Java将MongoDB对象ID转换为Java日期或Instant

如何将带时区的PostgreSQL时间戳转换为Java Instant或OffSetDateTime?

如何从MySQL DATETIME转换为java.time.Instant并显示给用户的系统默认时区?