C# [ThreadStatic] 标记静态字段对多线程执行的影响
类的静态字段在类的实例中是共享的。多个线程修改实例字段的值在对其它线程来说是可见的,这也是clr默认的行为。对静态字段添加ThreadStaticAttribute标记可以改变这种默认的行为。
ThreadStaticAttribute
指示静态字段的值对于每个线程都是唯一的。用 ThreadStaticAttribute 标记的 static 字段不在线程之间共享。每个执行线程都有单独的字段实例,并且独立地设置及获取该字段的值。如果在不同的线程中访问该字段,则该字段将包含不同的值。
[ThreadStatic]
public static int _field;
public static int _field2;
// local variable
new Thread(() => {
for (int x = ; x < ; x++) {
_field++;
_field2++;
//Console.WriteLine("Thread A: {0}", _field);
Console.WriteLine("Thread A2: {0}", _field2);
}
}).Start();
new Thread(() => {
for (int x = ; x < ; x++) {
_field++;
_field2++;
//Console.WriteLine("Thread B: {0}", _field);
Console.WriteLine("Thread B2: {0}", _field2);
}
}).Start();

分析
具有ThreadStatic标记的静态变量,在每个线程中都有自己的副本。
而一般静态变量在进程之间共享的。
C# [ThreadStatic] 标记静态字段对多线程执行的影响的更多相关文章
- dotnet 线程静态字段
在 dotnet 程序提供了一个好用的特性,可以让字段作为线程的静态字段,也就是在相同线程的所有代码访问的静态字段是相同对象,但不同线程访问的时候是不同的 在 .NET 程序可以使用 ThreadSt ...
- 被 C# 的 ThreadStatic 标记的静态变量,都存放在哪里了?
一:背景 1. 讲故事 前几天公号里有一位朋友留言说,你windbg玩的溜,能帮我分析下被 ThreadStatic 修饰的变量到底存放在哪里吗?能不能帮我挖出来,其实这个问题问的挺深的,玩高级语言的 ...
- 深入理解 静态类和静态字段(C# 基础)
序言 以前,总是被提醒,在编程过程中尽量少用静态变量,数据丢失什么的,今天有空,禁不住对静态变量的强烈好奇,跟我一起了解下静态家族的内幕吧. 静态类 定义 静态类与非静态类的重要区别在于静态类不能实例 ...
- Java 线程和多线程执行过程分析
*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...
- 零基础学Java(12)静态字段与静态方法
静态字段与静态方法 之前我们都定义的main方法都被标记了static修饰符,那到底是什么意思?下面我们来看看 静态字段 如果将一个字段定义为static,每个类只有一个这样的字段.而对于非静 ...
- python的类和对象——番外篇(类的静态字段)
什么是静态字段 在开始之前,先上图,解释一下什么是类的静态字段(我有的时候会叫它类的静态变量,总之说的都是它.后面大多数情况可能会简称为类变量.): 我们看上面的例子,这里的money就是静态字段,首 ...
- C# 之 静态字段初始化
当一个字段声明中含有 static 修饰符时,由该声明引入的字段为静态字段(静态变量).当不存在 static 修饰符时,由该声明引入的字段为实例字段(实例变量). 静态字段不 ...
- java:利用静态字段和构造函数实现已建对象数查询
问题:使用类的静态字段和构造函数,我们可以跟踪某个类所创建对象的个数. 请写一个类,在任何时候都可以向它查询"你已经创建了多少个对象?". 程序设计思想: 利用静态变量指定一个计数 ...
- python的类和对象(类的静态字段)
转自:http://www.cnblogs.com/Eva-J/p/5044411.html 什么是静态字段 在开始之前,先上图,解释一下什么是类的静态字段(我有的时候会叫它类的静态变量,总之说的都是 ...
随机推荐
- django(模版)
官方文档:https://docs.djangoproject.com/en/1.11/ref/templates/language/ 常用语法 Django模板中只需要记两种特殊符号: {{ }} ...
- CentOS7.X版本系统的下载和安装
一.下载CentOS镜像 1.打开浏览器输入centos.org 2.选择版本下载 3.进入下载页面选择下载版本的种子链接,在迅雷下载即可. 二安装CentOS系统 1.服务器开机,根据界面提示进入磁 ...
- MCUXpresso IDE:导入Kinetis Design Studio工程
我的许多当前活跃的工程都在使用恩智浦的Kinetis Design Studio(KDS)V3.2.0(我在GitHub上发表了许多工程). 现在随着MCUXpresso IDE的出现(参见“MCUX ...
- VGG网络的Pytorch实现
1.文章原文地址 Very Deep Convolutional Networks for Large-Scale Image Recognition 2.文章摘要 在这项工作中,我们研究了在大规模的 ...
- maya 在 pymel 中运行 mel
maya 在 pymel 中运行 mel 前言 maya mel 自身定义了很多有用的方法,当我们用 pymel 开发的时候,不想重新写一遍 mel 已经有的功能,那么就可以在 pymel 中运行 m ...
- vueRouter history模式下 nginx配置
对于VUE的router[mode: history]模式(这里主要是为了去除链接上的"#")开发的时候,一般都不出问题.是因为开发时用的服务器为node,Dev环境中已配置好了, ...
- 多任务案例--文件夹copy.py
import os import multiprocessing def copy_file(q,file_name,new_folder_name,old_folder_name): with op ...
- Codeforces Round #597 (Div. 2) C. Constanze's Machine
链接: https://codeforces.com/contest/1245/problem/C 题意: Constanze is the smartest girl in her village ...
- navigator对象及属性(userAgent)(扩展)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Airtest真机链接(一)
确认ADB是否能够正常连接到手机 windows系统下: 用USB线连好手机后,进入AirtestIDE文件夹,在 AirtestIDE_2019-05-09_py3_win64/airtest/co ...