gpt4 book ai didi

c# - ThreadStatic 属性如何工作?

转载 作者:IT王子 更新时间:2023-10-29 03:32:59 28 4
gpt4 key购买 nike

[ThreadStatic] 属性如何工作?我假设编译器会发出一些 IL 来填充/检索 TLS 中的值,但查看反汇编时它似乎并没有在那个级别执行它。

作为后续,如果你把它放在一个非静态成员上会发生什么?我们让开发人员犯了这个错误,编译器甚至没有发出警告。

更新

此处回答的第二个问题:ThreadStatic Modified with Static C#

最佳答案

How does [ThreadStatic] attributework?

你可以认为标有ThreadStatic的字段附加到一个线程,它的生命周期与线程的生命周期相当。

因此在伪代码中,ThreadStatic 类似于(在语义上)将键值附加到线程:

Thread.Current["MyClass.myVariable"] = 1;
Thread.Current["MyClass.myVariable"] += 1;

但语法更简单:

class MyClass {
[ThreadStatic]
static int myVariable;
}
// .. then
MyClass.myVariable = 1;
MyClass.myVariable += 1;

what happens if you put it on a non-static member?

我相信它被忽略了:

    class A {
[ThreadStatic]
public int a;
}
[Test]
public void Try() {
var a1 = new A();
var a2 = new A();
a1.a = 5;
a2.a = 10;
a1.a.Should().Be.EqualTo(5);
a2.a.Should().Be.EqualTo(10);
}

另外值得一提的是,与普通静态字段相比,ThreadStatic 不需要任何同步机制(因为状态不共享)。

关于c# - ThreadStatic 属性如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5227676/

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