首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏newbe36524的技术专栏

    为什么 Random.Shared 是线程安全的

    [ThreadStatic] 属性用于标识一个字段,表示该字段在每个线程中都有一个独立的值。 例如,如果一个字段被标记为 [ThreadStatic],那么每个线程都会有一个单独的副本,它们之间互不影响。 举个例子,假设我们有一个类,它有一个 [ThreadStatic] 字段: public class MyClass { [ThreadStatic] public static int Counter; } 在这个例子中,Counter 字段被标记为 [ThreadStatic],表示每个线程都有一个单独的副本。 以上是 [ThreadStatic] 属性的使用方法。在 Random.Shared 属性的实现中,也采用了类似的方法,来实现种子的线程安全访问。

    45740编辑于 2023-08-23
  • 来自专栏JusterZhu

    ThreadLocal

    使用注意事项 初始化:ThreadLocal<T>允许我们通过委托来初始化每个线程的数据,而ThreadStatic字段需要在每个线程中手动初始化。 性能:ThreadLocal<T>比ThreadStatic更灵活,但在性能上可能略有损耗。因此,在性能敏感的场合,ThreadStatic可能是更好的选择。 2. ThreadStatic属性 ThreadStatic是另一种实现TLS的方式。它用于静态字段,指示该字段对于每个线程都是唯一的。 using System; using System.Threading; class Program { [ThreadStatic] private static int _threadStaticData 如果需要在线程之间共享数据,可能需要考虑其他机制,如 ThreadStatic 属性或 ThreadLocal<T> 类。 4.

    23200编辑于 2025-01-23
  • 来自专栏喵叔's 专栏

    .NET6新东西--Random.Shared

    更好的方法是创建两个Random对象: public static class RD2 { private static Random _g = new Random(); [ThreadStatic 代码中的_g对象是用来生产随机的seed,避免使用默认的seed,_l对象被标记为ThreadStatic,每一个线程都会拥有一个单独的Random对象,从而避免了线程安全问题。

    36720发布于 2021-11-15
  • 来自专栏大内老A

    从执行上下文角度重新理解.NET(Core)的多线程编程[1]:基于调用链的”参数”传递

    目录 一、ThreadStatic字段或者ThreadLocal<T>对象 二、CallContext 三、支持跨线程传递吗? 四、IllogicalCallContext和LogicalCallContext 五、AsyncLocal<T> 一、ThreadStatic字段或者ThreadLocal<T>对象 本篇文章旨在解决一个问题 public class CallStackContext : Dictionary<string, object> { [ThreadStatic] private static CallStackContext 既然我们可以使用ThreadStatic静态字段,自然也可以使用ThreadLocal<T>对象来代替。如果希望时候后者,我们只需要将CallStackContext改写成如下的形式即可。 value; } public long TraceId { get; } = Interlocked.Increment(ref _traceId); } 二、CallContext 除使用ThreadStatic

    1.6K30发布于 2020-11-26
  • 来自专栏DotNet NB && CloudNative

    最全C#线程查漏补缺

    Exception e) { t.SetException(e); } return t.Task; } } 插槽和 ThreadStatic [ThreadStatic] IDE 可以提供编译检查,性能和安全性更好,如果线程所需的值类型是固定的,就应该使用 [ThreadStatic]。 tip: 插槽和 [ThreadStatic] 中的值一般不初始化,因为跟线程相关,在哪个线程初始化,只有那个线程可以看到这个初始化后的值,所以初始化也就没啥意义了。 Parallel.Invoke(StaticThreadDemo.Test, StaticThreadDemo.Test, StaticThreadDemo.Test); // 打印对应线程的ID,证明被 [ThreadStatic } } static class StaticThreadDemo { [ThreadStatic] private static int?

    48120编辑于 2023-08-30
  • 来自专栏EdisonTalk

    .NET Core多线程 (4) 锁机制

    (2).NET中的解决方案 ThreadStatic(Attribute):当前线程拿到的是定义好的值,其他线程拿到的可能是默认值(值类型可能是0,引用类型可能是null,需要注意容错)。 ThreadLocal:与ThreadStatic最大的区别在于ThreadStatic只在第一个线程初始化,ThreadLocal则会为每个线程初始化。 (3)存储在哪里?

    71240编辑于 2023-08-13
  • 来自专栏葡萄城控件技术团队

    把WPF Dialog转成WinForm Dialog需要注意的问题续

    . /// public class WpfModalDialogFixer { [ThreadStatic] private

    1.3K80发布于 2018-01-10
  • 来自专栏哲学驱动设计

    性能优化总结(五):CSLA服务端如何使用多线程的解决方案

    为了最少地改动原有代码,我把字段的代码修改为: [ThreadStatic] private static IPrincipal __principalThreadSafe; private static 如果是在服务端时,就换成了一个标记了[ThreadStatic]的字段,该标记表示:这个字段会为每一个线程分配独立的值。

    87880发布于 2018-01-26
  • 来自专栏AI.NET极客圈

    .Net Core 最优 MD5 打开方式!初学者建议收藏(支持 SHA1,SHA256,.Net Framework)

    16: /// h 17: [ThreadStatic] 18: static THashAlgorithm instance; 19: 关于线程唯一和泛型唯一: 还记得老师教我们的时候强调静态变量就是唯一的,可是现在就突然出现了两个反例,与之对立,这让初学者一下子难以接受,其实这也很容易理解的: 首先 [ThreadStatic] 特性我们可以理解为将字段封装为了 15: /// 16: [ThreadStatic] 17: static THashAlgorithm instance; 18: 15: /// 16: [ThreadStatic] 17: static THashAlgorithm instance; 18: 15: /// 16: [ThreadStatic] 17: static THashAlgorithm instance; 18:

    2.3K20发布于 2019-08-21
  • 来自专栏InCerry

    .NET性能优化-复用StringBuilder

    360; private const int DefaultCapacity = 16; // == StringBuilder.DefaultCapacity [ThreadStatic result = sb.ToString(); Release(sb); return result; } } } 这里我们又复习了ThreadStatic

    45720编辑于 2022-11-14
  • 来自专栏InCerry

    .NET周刊【2月第1期 2025-02-02】

    并发编程 - 线程同步(二) https://www.cnblogs.com/hugogoos/p/18694925 本文探讨了C#中的线程同步方案,主要介绍了ThreadStatic和ThreadLocal ThreadStatic用于实现线程本地存储,使每个线程拥有独立字段副本,避免了资源共享问题。使用ThreadStatic时需注意,它仅作用于静态字段,且不应进行内联初始化。 ThreadLocal则解决了ThreadStatic的一些缺陷,通过实例化,可以让所有线程获取相同的初始化值,因而更为推荐。

    2K00编辑于 2025-02-10
  • 来自专栏林德熙的博客

    dotnet 线程静态字段

    get => _threadStaticProperty; set => _threadStaticProperty = value; } [ThreadStatic

    22220编辑于 2022-08-07
  • 来自专栏林德熙的博客

    dotnet 线程静态字段

    get => _threadStaticProperty; set => _threadStaticProperty = value; } [ThreadStatic

    40640发布于 2019-06-19
  • 来自专栏林德熙的博客

    WPF 如何知道当前有多少个 DispatcherTime 在运行

    根据 Dispatcher.CurrentDispatcher 的定义,此 CurrentDispatcher 是 ThreadStatic 线程静态,因此以上调试断点必须落在主线程执行的代码 ?

    1.4K30发布于 2021-04-28
  • 来自专栏林德熙的博客

    WPF 如何知道当前有多少个 DispatcherTimer 在运行

    根据 Dispatcher.CurrentDispatcher 的定义,此 CurrentDispatcher 是 ThreadStatic 线程静态,因此以上调试断点必须落在主线程执行的代码 如进一步了解当前的

    1.3K30编辑于 2021-12-24
  • 来自专栏大内老A

    Context+ContextScope——这是否可以看作一种设计模式?

    1: public class ActivityContext: IDisposable 2: { 3: [ThreadStatic] 4:

    24920编辑于 2022-05-09
  • 来自专栏EdisonTalk

    .NET基础拾遗(5)多线程开发基础

    一致 for (int i = 0; i < 5; i++) { Thread thread = new Thread(ThreadStatic.Work Console.ReadKey(); } } ///

    /// 包含线程静态数据 /// public class ThreadStatic { // 值类型的线程静态数据 [ThreadStatic] private static int threadId = 0; { id = value; } } }   该实例的执行结果如下图所示,正如我们所看到的,对于使用了ThreadStatic 特性的字段,.NET会将其作为线程独享的数据来处理,当某个线程对一个使用了ThreadStatic特性的字段进行赋值后,这个值只有这个线程自己可以看到并访问修改,该值对于其他线程时不可见的。

    1.1K20发布于 2018-08-20
  • 来自专栏DotNet NB && CloudNative

    C#性能优化杂七杂八的总结

    使用 ThreadStatic 替代 NameDataSlot ★ 存 取 NameDataSlot 的 Thread.GetData 和 Thread.SetData 方法需要线程同步,涉及两个锁:一个是 规避这个问题的方法是使用 ThreadStatic 变量。 示例如下: public sealed class InvokeContext { [ThreadStatic] private static InvokeContext current

    67730编辑于 2023-11-14
  • 来自专栏Kitty的日常笔记

    分享一篇开发杂文

    1.3.2 使用 ThreadStatic 替代 NameDataSlot ★ 存 取 NameDataSlot 的 Thread.GetData 和 Thread.SetData 方法需要线程同步, 规避这个问题的方法是使用 ThreadStatic 变量。 示例如下:  public sealed class InvokeContext  {  [ThreadStatic]   private static InvokeContext current; 

    1.1K10发布于 2020-06-19
  • 来自专栏烙馅饼喽的技术分享

    我在工作中使用的自己实现的超简易ORM工具

    class SessionScopeStack  {   /* 在web情况下,不宜使用static变量,因为会串.所以,改为使用item,    * 保证每个request有一个栈 */ //  [ThreadStatic ()] //  private static Stack _stack=null;      /******************/   //[ThreadStatic()]   private returns></returns>   public static Stack Current()   {    lock(lockobj  )    { //              cs 的情况,使用threadstatic

    1.8K80发布于 2018-05-02
领券