问题标签 [lazy-static]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
rust - 从 std::env::consts::OS=="windows" 在 Rust 中定义一个静态布尔值
我想创建一个IS_WINDOWS
在 Rust 文件中调用的全局静态布尔值:
但是,当我这样做时,任何IS_WINDOWS
从其他地方引用该值的东西都不会将其视为 a bool
,而是将其视为自定义IS_WINDOWS
结构,即尝试执行以下操作:
...导致错误:
multithreading - 访问全局 HashMap 中不相交的条目以获取 Rust 中线程的生命周期
我当前的项目需要记录线程执行期间发生的各种事件的一些信息。这些事件由线程 id 保存在全局结构索引中:
每个线程都将 new 附加Entry
到其向量中。因此,线程访问“不相交”的向量。Rust 需要同步原语来完成上述工作。所以真正的实现看起来像:
这可行,但所有线程都在同一个全局锁上竞争。如果一个线程可以在线程的生命周期内“借用”其各自的向量,那就太好了,这样它就可以写入它需要的所有条目,而无需每次都锁定(我知道外部锁定对于确保线程不插入是必要的同时进入 HashMap)。
为此,我们可以通过 Mutex 为 HashMap 中的值添加 Arc 和更多内部可变性:
现在我们可以在产生线程时“检查”我们的条目:
这有效,这就是我想要的。但是,由于 API 限制,我必须从代码中不同的地方访问 MutexGuard,而无法将 MutexGuard 作为参数传递给函数。因此,我使用线程局部变量:
我做不到,LOCAL_ENTRIES: MutexGuard<_>
因为thread_local!
需要'static
一生。所以目前我.lock()
每次想访问线程局部变量时都必须:
很抱歉所有的代码和解释,但我真的被困住了,想说明为什么它不起作用以及我想要做什么。如何在 Rust 中解决这个问题?
还是我被互斥锁的成本挂断了?对于 any Arc<Mutex<Vec<Entry>>>
,锁将始终被解锁,因此进行原子锁定的成本会很小?
感谢您的任何想法。这是Rust Playground中的完整示例。
rust - 我应该使用什么类型来返回lazy_static 值?
我计划有一个通过 trait 方法提供 JSON 模式的结构。模式存储在一个惰性静态变量中,但我的schema()
函数必须返回哪种类型?
我会收到这个错误
multithreading - Rust:为什么lazy_static 不适用于某些类型
我需要创建一些全局可变变量,使用lazy_static!某些类型有效,但某些其他类型无效。互斥锁是用来改变值的。
这有效:
这不是(Function
即 js_sys::Function)
错误是:*mut u8 is not safe to send between threads
我目前的解决方法是使用 thread_local!对于全局可变变量,但我需要线程。如何lazy_static
与所有类型一起使用?
rust - 从 Rust 中的全局 HashMap 获取项目的引用
我正在尝试使用静态 HashMap<String, Object> 来存储一些我想在未来全局使用和修改的数据。我发现声明这种全局映射的某种方式是使用lazy_static 和互斥锁,以便安全地共享数据。但是,当我想将这些对象作为参考返回时,我遇到了一些所有权问题,就像我在上面的代码中所做的那样:
所以问题是:有没有办法正确地做到这一点?Rust 中是否存在我可以用来实现这种行为的任何设计模式?
非常感谢!
rust - 从 Rust 中的不同模块填充静态数组?
在我的 Rust 项目中,我需要一个全局保持、静态数组或 vec,它在模块可以注册值或函数的地方初始化一次。我想,使用lazy_static!-crate 可以做到这一点,但似乎并非如此。
这就是我想要实现的目标:
- 模块
a
用一些数据初始化一个数组/向量。 - 然后模块
b
(或更多模块)将此数组/vec 扩展为更多数据。 - 所有这些都应该只在程序启动时完成一次,并且在程序执行期间不会修改数组。它只是一个全局保存的查找表,但曾经由多个模块创建。
这是我的初稿,它不起作用游乐场链接
有人可以帮忙吗?
multithreading - 延迟初始化和可变静态借用 [Rust]
我的问题如下:
是否可以对对象进行延迟初始化,然后将其借用为'static
终生可变的?
一些上下文
首先,我将展示一个示例来说明延迟初始化的含义。我提出的延迟初始化模型是将 cratelazy_static
与一个标准库一起使用,其中包含Mutex
一个Option<T>
. 这里有一个延迟初始化的例子。
您可以在Rust Playground中执行上述代码并检查它11
是否正确打印。
引入需要静态生命周期的结构函数
现在,假设我在其中添加了一个函数,该函数DeferredStruct
将创建一个工作线程以执行一些需要很长时间的计算:
在这种情况下,需要&mut self
有一个'static
生命周期:
因此,该函数将采用&'static mut self
.
当试图借用as和的DeferredStruct
内部Option
时,问题就来了。MY_DEFERRED
'static
mut
如果我不能借钱'static
,mut
那么我不能打电话deferred.static_function()
。因为价值不会存在足够长的时间。
这里有一个Rust Playground中的最小可重现示例。
TL;博士
是否可以借用在运行时创建的对象(不一定是在程序的立即启动时创建的)在 aMutex<Option<T>>
中作为可变对象并'static
终身使用?
任何帮助表示赞赏。
rust - 如何改变静态引用使用大小?
这段代码给了我这些错误:
我如何变异MY_GLOBAL
?
memory - 如何在lazy_static 中释放内存?
文档指出,如果该类型具有析构函数,则不会调用它:https ://docs.rs/lazy_static/1.4.0/lazy_static/#semantics
那么我应该如何释放内存呢?
rust - Rust 中lazy_static 的全局 HashMap 项目的生命周期
我是 Rust 的新手。
我定义了一个User
by的全局 HashMap lazy_static
。
里面有一生User
,所以我要在里面设置一生lazy_static
。好像只能'static
用在lazy_static
。
这是一个问题:我现在可以将“非静态”用户插入 HashMap 吗?
这是插入非静态用户的代码:
这是错误: