c# 多线程 读写分离
class Program
{
private static ReaderWriterLockSlim _LockSlim = new ReaderWriterLockSlim();
private static Hashtable list = Hashtable.Synchronized(new Hashtable()); static void Main(string[] args)
{
new Thread(new ParameterizedThreadStart(delegate(object obj) {
Write(, );
})).Start(); Thread.Sleep(); new Thread(new ParameterizedThreadStart(delegate(object obj)
{
Read(, );
})).Start(); new Thread(new ParameterizedThreadStart(delegate(object obj)
{
Read(, );
})).Start(); new Thread(new ParameterizedThreadStart(delegate(object obj)
{
Read(, );
})).Start(); new Thread(new ParameterizedThreadStart(delegate(object obj)
{
Read(, );
})).Start(); Console.ReadKey();
} /// <summary>
/// 对于i相同的线程进行阻塞保证不会并行多个
/// </summary>
/// <param name="i"></param>
/// <param name="j"></param>
public static void Read(int i,int j)
{
Console.WriteLine(DateTime.Now.ToString() + "\t线程" + i.ToString() + "即将进入读取状态");
_LockSlim.EnterReadLock();
Console.WriteLine(DateTime.Now.ToString() + "\t线程" + i.ToString() + "进入读取状态"); Thread.Sleep(j); _LockSlim.ExitReadLock();
Console.WriteLine(DateTime.Now.ToString() + "\t线程" + i.ToString() + "退出读取状态");
} public static void Write(int i, int j)
{
Console.WriteLine(DateTime.Now.ToString() + "\t线程" + i.ToString() + "即将进入写入状态");
_LockSlim.EnterWriteLock();
Console.WriteLine(DateTime.Now.ToString() + "\t线程" + i.ToString() + "进入写入状态"); Thread.Sleep(j); _LockSlim.ExitWriteLock();
Console.WriteLine(DateTime.Now.ToString() + "\t线程" + i.ToString() + "退出写入状态");
} }
输出:
// :: 线程0即将进入写入状态
// :: 线程0进入写入状态
// :: 线程1即将进入读取状态
// :: 线程2即将进入读取状态
// :: 线程3即将进入读取状态
// :: 线程4即将进入读取状态
// :: 线程1进入读取状态
// :: 线程4进入读取状态
// :: 线程0退出写入状态
// :: 线程2进入读取状态
// :: 线程3进入读取状态
// :: 线程2退出读取状态
// :: 线程1退出读取状态
// :: 线程4退出读取状态
// :: 线程3退出读取状态
c# 多线程 读写分离的更多相关文章
- Java多线程之~~~ReadWriteLock 读写分离的多线程实现
在多线程开发中,常常会出现一种情况,我们希望读写分离. 就是对于读取这个动作来说,能够同一时候有多个线程同 时去读取这个资源,可是对于写这个动作来说,仅仅能同一时候有一个线程来操作.并且同一时候,当有 ...
- python基础-11 socket,IO多路复用,select伪造多线程,select读写分离。socketserver源码分析
Socket socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. sock ...
- Mysql + keepalived 实现双主热备读写分离【转】
Mysql + keepalived 实现双主热备读写分离 2013年6月16日frankwong发表评论阅读评论 架构图 系统:CentOS6.4_X86_64软件版本:Mysql-5.6.12 ...
- Mycat在MySQL主从模式(1主1从)下读写分离和及自动切换模式的验证
实验环境 两台Centos7 MySQL5.7.12 IP地址为:192.168.10.36 192.168.10.37 一台Centos7 Mycat IP地址为:192.168.10.31 一 ...
- MySQL多数据源笔记2-Spring多数据源一主多从读写分离(手写)
一.为什么要进行读写分离呢? 因为数据库的"写操作"操作是比较耗时的(写上万条条数据到Mysql可能要1分钟分钟).但是数据库的"读操作"却比"写操作 ...
- mysql之使用centos7实现主从复制(读写分离)的实现过程
什么是主从复制? 主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库:主数据库一般是准实时的业务数据库. 主从复制的作用(好处)! 1.做数据的热备,作为后备数据库,主数据库服务器故 ...
- MariaDB 10 (MySQL DB) 多主复制并实现读写分离
----本文大纲 简介 资源配置 拓扑图 实现过程 ==================== 一.简介 MMM 即Master-Master Replication Manager for MySQL ...
- mysql主从读写分离,分库分表
1.分表 当项目上线后,数据将会几何级的增长,当数据很多的时候,读取性能将会下降,更新表数据的时候也需要更新索引,所以我们需要分表,当数据量再大的时候就需要分库了. a.水平拆分:数据分成多个表 b. ...
- Mysql多实例安装+主从复制+读写分离 -学习笔记
Mysql多实例安装+主从复制+读写分离 -学习笔记 .embody{ padding:10px 10px 10px; margin:0 -20px; border-bottom:solid 1px ...
随机推荐
- day11- python生成式和生成器
列表生成式 列表生成式是python受欢迎的语法之一,通过一句简洁的语法就可以对一组元素进行过滤,还可以对得到的元素进行转换处理.语法格式为: [exp for val in collection i ...
- ubuntu compile openjdk87
0. use oracle JDK,not OpenJDK 1. 遇到错误Error:./gamma: relocation error: /usr/lib/jvm/java-7-openjdk-am ...
- 每天CSS学习之direction
direction是CSS2的属性,它的作用是规定文字书写的方向. 1.ltr:从左到右,即left to right.该值为默认值.如下所示: div{ border:1px solid red; ...
- centos7下nginx安全配置
Linux服务器下nginx的安全配置 1.一些常识 linux下,要读取一个文件,首先需要具有对文件所在文件夹的执行权限,然后需要对文件的读取权限. php文件的执行不需要文件的执行权限,只需要 ...
- 安装连接mysql8时候遇到的问题以及解决(转)
官网下载mysql8的安装包: https://dev.mysql.com/downloads/ 下一步安装即可. mysql8增加了传说中的安全性校验 遇到的几个问题: 1.natcat连接不上.参 ...
- request的响应时间elapsed和超时timeout
前言:requests发请求时,接口的响应时间,也是我们需要关注的一个点,如果响应时间太长,也是不合理的 1.获取接口请求的响应时间 r.elapsed.total_seconds() import ...
- 预期结果 参数化parametrize
1.pytest.mark.parametrize装饰器可以实现测试用例参数化. 2.实例: import pytest @pytest.mark.parametrize("req,expe ...
- 移动端与PC端的触屏事件
由于移动端是触摸事件,所以要用到H5的属性touchstart/touchmove/touched,但是PC端只支持鼠标事件,所以此时可以这样转换 var touchEvents = { touchs ...
- [BUG]数据库日期格式, 到页面是毫秒值
springboot 配置文件
- 排序jq
var arr = [1,2,3,4,5,6,7]; arr.sort(function (a, b) { 从大到小 if (a > b) { return 1; } else if (a &l ...