实现多用户读/单用户写同步
来源:互联网 发布:data science 知乎 编辑:程序博客网 时间:2024/05/18 17:28
ResourceData.cs
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ProcessTest{ /// <summary> /// 单例模式 /// </summary> public class ResourceData { private static readonly ResourceData instance = new ResourceData(); static ResourceData() { } private ResourceData() { } public static ResourceData Instance { get { return instance; } } public string DATA; }}
ResourceBLL.cs
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;namespace ProcessTest{ public class ResourceBLL { static System.Threading.ReaderWriterLock rwl = new System.Threading.ReaderWriterLock(); public static string Read() { return ResourceData.Instance.DATA; } //写数据 public static void Write() { try { string value; try { value = DateTime.Now.ToString(); } catch (Exception) { //获取值时如果出现异常,则不改变选前的值 //log 同时应该记录到日志当中 return; } ParameterizedThreadStart ParStart = new ParameterizedThreadStart(ThreadMethod); Thread myThread = new Thread(ParStart); object param = value; myThread.Start(param); } catch (ApplicationException) { //获取写操作锁失败 //log 同时应该记录到日志当中 } } public static void ThreadMethod(object ParObject) { //Timeout.Infinite 无限延长等待时间 rwl.AcquireWriterLock(Timeout.Infinite); //Thread.Sleep(1000);测试 ResourceData.Instance.DATA = ParObject as string ; Console.WriteLine("W:{0}", ParObject); rwl.ReleaseWriterLock(); } }}
Program.cs
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;namespace ProcessTest{ class Program { static void Main(string[] args) { ResourceBLL.Write(); //分别创建2个读操作线程,2个写操作线程,并启动 Thread tr0 = new Thread(new ThreadStart(Read)); Thread tr1 = new Thread(new ThreadStart(Read)); Thread tr2 = new Thread(new ThreadStart(Write)); Thread tr3 = new Thread(new ThreadStart(Write)); tr0.Start(); tr1.Start(); tr2.Start(); tr3.Start(); //等待线程执行完毕 tr0.Join(); tr1.Join(); tr2.Join(); tr3.Join(); Console.WriteLine("1"); System.Console.ReadKey(); } //读数据 static void Read() { var length = 50000000; for (int i = 0; i < length; i++) { //Thread.Sleep(20); //ResourceBLL.Read(); Console.WriteLine("R:{0}", ResourceBLL.Read()); } } //写数据 static void Write() { var length = 10000000; for (int i = 0; i < length; i++) { Thread.Sleep(500); ResourceBLL.Write(); } } }}
0 0
- 实现多用户读/单用户写同步
- hive单用户及多用户的实现(已经实现多用户)
- SqlServer: 单用户模式下查杀相关进程实现单/多用户转换
- SqlServer: 单用户模式下查杀相关进程实现单/多用户转换 .
- 单用户改为多用户
- sql2005 单用户改为多用户sql语句
- sql2005 单用户改为多用户sql语句
- windows远程桌面缺陷-单用户和多用户
- 单用户模式 及 多用户模式转换
- mssql数据库单用户修改为多用户访问
- sql server r2 单用户--》多用户 解决方法
- ubuntu下ROR安装选择单用户或多用户
- 如何更改数据库的单用户模式和多用户模式
- sql server数据库 从单用户模式改为多用户模式
- SqlServer数据库将单用户模式变成多用户模式的方法
- SQL Server单用户模式强制改为多用户模式
- 使用临界区对象实现读,写线程同步
- 用python写多用户登陆
- Intent 详细介绍
- 疯疯癫癫
- qt的qpushbutton的基本qss 用法
- 试libSVM
- http://www.jb51.net/os/Ubuntu/35201.html
- 实现多用户读/单用户写同步
- Android 源码工程中自带的demo(示例程序)
- Windows Phone 8 实现列表触底加载
- 文件读写
- Android中JNI的使用方法
- 浅谈爱情
- Boost.bind 的使用
- 线性回归介绍之三——线性回归的使用条件
- Object-C基础—属性的介绍与使用