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退出读取状态

最新文章

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

热门文章

  1. Docker安装websphere(四)
  2. day06 小数据池,再谈编码
  3. myeclipse复制的文件代码乱码
  4. 某些material英文翻译
  5. 理解AXI Quad Serial Peripheral Interface(SPI) IP核
  6. 第六节 静态的(static)和单例模式
  7. xampp 忘记密码的处理方式.
  8. Ubuntu 16.04安装vsftpd 并开启ftp服务
  9. easyUI 下拉组件转义
  10. ecmall 主从表的4种模型关系