C#字典Dictionay多线程读是否是安全的
答案:是线程安全的,只读不写多线程下,完全不需要加锁!
测试代码:
using System;
using System.Diagnostics;
using System.Threading;
using System.Collections.Generic; namespace hello
{
public class ThreadSafe
{
Dictionary<int, int> dits = new Dictionary<int, int>(); public ThreadSafe()
{
for (int i = ; i < ; i++)
{
dits.Add(i, i);
}
}
public void Test(object i)
{
int t = Convert.ToInt32(i);
int v;
Thread.Sleep();
dits.TryGetValue(t, out v);
if (!t.Equals(v))
{
Console.WriteLine("i:{0},v:{1}", t, v);
}
}
}
}
模拟5万个线程读字典,看看是否混乱:
static void Main(string[] args)
{
ThreadSafe ts = new ThreadSafe();
Random random=new Random();
Console.WriteLine("Hello World!2");
for (int i = ; i < ; i++)
{
new Thread(new ParameterizedThreadStart(ts.Test)).Start(random.Next());
}
Console.Read();
}
完全不需要担心,放心
C#字典Dictionay多线程读是否是安全的的更多相关文章
- java 并发性和多线程 -- 读感 (二 线程间通讯,共享内存的机制)
参考文章:http://ifeve.com/java-concurrency-thread-directory/ 其中的竞态,线程安全,内存模型,线程间的通信,java ThreadLocal类小节部 ...
- java 并发性和多线程 -- 读感 (一 线程的基本概念部分)
1.目录略览 线程的基本概念:介绍线程的优点,代价,并发编程的模型.如何创建运行java 线程. 线程间通讯的机制:竞态条件与临界区,线程安全和共享资源与不可变性.java内存模型 ...
- 利用itertools生成密码字典,多线程撞库破解rar压缩文件密码
脚本功能: 利用itertools生成密码字典(迭代器形式) 多线程并发从密码字典中取出密码进行验证 验证成功后把密码写入文件中保存 #!/usr/bin/env python # -*- codin ...
- java多线程-读写锁原理
Java5 在 java.util.concurrent 包中已经包含了读写锁.尽管如此,我们还是应该了解其实现背后的原理. 读/写锁的 Java 实现(Read / Write Lock Java ...
- 【转】JAVA 并发性和多线程 -- 读感 (二 线程间通讯,共享内存的机制)
原文地址:https://www.cnblogs.com/edenpans/p/6020113.html 参考文章:http://ifeve.com/java-concurrency-thread-d ...
- 多线程 读写锁SRWLock
在<秒杀多线程第十一篇读者写者问题>文章中我们使用事件和一个记录读者个数的变量来解决读者写者问题.问题虽然得到了解决,但代码有点复杂.本篇将介绍一种新方法——读写锁SRWLock来解决这一 ...
- java多线程-读写锁
Java5 在 java.util.concurrent 包中已经包含了读写锁.尽管如此,我们还是应该了解其实现背后的原理. 读/写锁的 Java 实现(Read / Write Lock Java ...
- java多线程读一个变量需要加锁吗?
如果只是读操作,没有写操作,则可以不用加锁,此种情形下,建议变量加上final关键字: 如果有写操作,但是变量的写操作跟当前的值无关联,且与其他的变量也无关联,则可考虑变量加上volatile关键字, ...
- 笔记2 linux多线程 读写锁
//read write lock #include<stdio.h> #include<unistd.h> #include<pthread.h> struct ...
随机推荐
- 如何写一个适配iPhoneX的底部导航
引言 iPhoneX发布至今已经有将近一年的时间了,各类app都多多少少做了对iPhoneX的适配,那对于我们H5页面该做哪方面的适配呢? 首先了解安全区域(safe area)的概念,它保证了内容在 ...
- pyengine介绍及使用
一个可以通过HTTP请求动态执行Python 代码的HTTP服务器,还自带一个装饰器来执行时间较长的任务. 使用方法 1 pip install pyengine 2 pyengine run -d ...
- LINUX LVM和快照卷配置和管理
具体参考这个文章把: http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_linux_042_lvm.html 1.LVM是什么 逻辑卷管理LVM是一个多 ...
- 阿里云CentOS安装配置Python3.7及pip3
一.安装Python3.7 安装依赖包 yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqli ...
- spring-boot(六) 邮件服务
学习文章来自:springboot(十):邮件服务 简单使用 1.pom包配置 pom包里面添加spring-boot-starter-mail包引用 <dependencies> < ...
- Linux官方源、镜像源汇总
本文收录在日常运维杂烩系列 一.站点版 1.企业站 搜狐:http://mirrors.sohu.com/ 网易:http://mirrors.163.com/ 阿里云:http://mirrors. ...
- Golang中的自动伸缩和自防御设计
Raygun服务由许多活动组件构成,每个组件用于特定的任务.其中一个模块是用Golang编写的,负责对iOS崩溃报告进行处理.简而言之,它接受本机iOS崩溃报告,查找相关的dSYM文件,并生成开发者可 ...
- Spring基础系列-Spring事务不生效的问题与循环依赖问题
原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9476550.html 一.提出问题 不知道你是否遇到过这样的情况,在ssm框架中开发we ...
- IIS域名转发
在IIS中设置Http重定向 界面操作如下: 最终通过上面的操作生成了一个配置文件如下: 我这面就是一个空的目录,里面仅包含这个配置文件,就可以实现转发啦
- js中const,var,let区别(转载)
js中const,var,let区别 来源:https://www.cnblogs.com/zzsdream/p/6372729.html 今天第一次遇到const定义的变量,查阅了相关资料整理了这篇 ...