当前位置:编程学习 > C#/ASP.NET >>

如何处理 多个写入访问一个文件 用C#

我这有个需求是 服务器上某个文件 一瞬间可能有 几百个进程(几百个IP)同时写入...请问大家有没有处理过类似的问题

有的人建议我说用信号量。。。。(但是现在是几百个IP 不是几百个进程 那个信号量怎么共享呢,我想过用application设置一个计数器,按照信号量的原理实现。。。。但是我太清楚代码如何写,怎么让线程停在那里等一会在运行?)
麻烦就麻烦在这是几百个IP同时访问 不是同一机器的几百线程访问。。。。
用lock 也不知道lock() 括号里些什么

大家谁有经验的能介绍下?
File 类中好像是有个FileShare枚举。。。大概知道杂用 但是很想知道这种问题一般怎么处理 --------------------编程问答--------------------

/// <summary>
        /// 写入锁
        /// </summary>
        private object OpLock = new object();
lock (OpLock)
{
}
--------------------编程问答-------------------- 。。。我只能告诉你,需求分析后的程序设计不合理。
如果你能实现1个文件同时被几百个并发使用,那你可以自己写一个新的数据库,而不需要什么SQLSERVER、ORACLE了。。。

比较现实、简单的处理办法:
1.制作服务端程序,运行在服务器上,打开文件,接收来着各个客户端的写入请求,排队后,写入文件。
2.客户端程序与服务端程序通信,给服务程序发送写入请求。(真正写文件的操作由服务端程序进行) --------------------编程问答-------------------- 没必要单文件吧,要不用数据,要不就先搞个内存队列缓存,在将这些数据写入文件 --------------------编程问答-------------------- 用队列方式

系统消息队列MessageQueue,一个线程用来发消息,另一个线程用来收消息,每收到一个消息的线程才对文件进行处理。
--------------------编程问答-------------------- 不能同时操作的。还是得一个个的往文件里存的。
用多线程接收。一个线程保存吧。 --------------------编程问答-------------------- 用多线程接收。一个线程保存吧。  --------------------编程问答-------------------- 看你要写什么内容了,一定要有规矩,最好像数据表那样,支持插入,有key和value,不要一股脑的任意写,后台可以开一个程序对这些数据逐条进行处理 --------------------编程问答-------------------- Mutex可以是全局范围的,试试名称以Global\开头,你可以参考http://msdn.microsoft.com/zh-cn/library/system.threading.mutex(v=vs.110).aspx

打开文件时用ReadWrite Mode,每次写入时检查刚刚创建的mutex。
--------------------编程问答-------------------- 好像很厉害的样子,关注一下,线程,我竟然还没用过 --------------------编程问答-------------------- 也不算需求了。。。。就是我自己设计的一个蛋疼程序。。。。。 --------------------编程问答-------------------- 用多线程接收。一个线程保存吧。  --------------------编程问答--------------------
引用 1 楼 yeqi3000 的回复:
C# code?1234567/// <summary>        /// 写入锁        /// </summary>        private object OpLock = new object();lock (OpLock){}


你这个Oplock 只是一个线程独有的 根本没有 就算改成static 也没法解决多个ip(进程)共享的

Mutex可以试试 
MessageQueue 我没用过 也试试 --------------------编程问答--------------------
引用 12 楼 careercup161 的回复:
引用 1 楼 yeqi3000 的回复:C# code?1234567/// <summary>        /// 写入锁        /// </summary>        private object OpLock = new object();lock (OpLock){}

你这个Oplock 只是一个线程独有的 根本没有 就算改成static 也没……

我只是告诉他lock的使用方式。
lock本身就是让其锁住的代码块在同一时刻只能被一个线程使用。
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,