gpt4 book ai didi

.net - Lazy 和线程安全 false 的含义

转载 作者:行者123 更新时间:2023-12-05 00:00:37 24 4
gpt4 key购买 nike

使用 Lazy<T> 的含义是什么?等级和标记 isThreadSafe: false在初始化期间?

在惰性需要访问实例成员而不是静态成员的场景中,惰性是在类构造函数中初始化的,这会自动要求 isThreadSafe: false在所有用途中?

最佳答案

In a scenario where lazy needs to access instance members and not static members where the lazy is initialized inside the class constructor does this automatically require isThreadSafe: false in all usages?



否 - isThreadSafe参数仅影响 Lazy<T> 中的值如何被 build 。

基本上,当您将其设置为 false 时,创建值的方法只会创建该值,将其设置到内部存储中,然后返回该值。

如果您将其设置为 true,则创建将被包裹在 lock 中。 ,防止多个线程创建对象。这映射到 LazyThreadSafetyMode.ExecutionAndPublication .

您也可以指定 PublicationOnly明确地,这将允许创建多个值,但随后使用 Interlocked.CompareExchange内部而不是锁定以确保第一个完成的创建例程的值是用于对象的值。

请注意,这些选项中没有一个对用于计算值的成员有任何影响——它们只影响值本身的创建方式。对创建以外的所有内容的访问始终是线程安全的。如果您正在初始化 Lazy<T>类构造函数中的实例成员,您可以有效地保证不需要同步,因此您可以设置 isThreadSafe为 false - 但这也意味着绝对没有理由使用 Lazy<T>在这种情况下,由于您使用的是显式实例化...

关于.net - Lazy<T> 和线程安全 false 的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9876877/

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