c# 多线程 读写分离
2024-08-29 09:30:23
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退出读取状态
最新文章
- 从Trie谈到AC自动机
- storm在linux系统下安装调试
- 基础C++ functional
- JavaEDU614 团队第三周项目总结
- jquery的延迟加载插件Lazy Load Plugin for jQuery
- Linux中断处理体系结构分析
- loadrunner做webservice接口之简单调用
- Android studio 删除Module、project
- How Indexes Are Stored
- 转:C语言申请内存时堆栈大小限制
- C++11中map的用法
- 朱晔的互联网架构实践心得S2E3:品味Kubernetes的设计理念
- mac 下node,yarn安装及版本切换
- Performance面板看js加载
- Reactor 3 学习笔记(1)
- 2.2 UML用例模型
- php大文件下载支持断点续传
- jquery 的each函数
- Entity Framework Code First 遭遇主键自动生成问题
- 错误:程序“XXX”不包含适合于入口点的静态“Main”方法