using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks; namespace ConsoleApplication8
{
/// <summary>
/// 本文的任务是通过多线程在三个文件aa.txt,bb.txt,cc.txt全部写入文件,完成任务之后,
/// 往ee.txt文件写入ok,之后主线程一直轮询去读取ee.txt该文件如果,里面出现ok,则往dd.txt写入内容,最后总任务完成之后删除临时文件ee.txt
/// </summary>
class Program
{
public static int i = ;
static void Main(string[] args)
{
int[] aa = new int[] { , , };
for (int i = ; i <=aa.Length; i++)
{
ParameterizedThreadStart ts = new ParameterizedThreadStart(ProcessData);
Thread th = new Thread(ts);
th.Start(i);
}
while (true)
{
string s = "";
FileStream fs = null;
try
{
fs = new FileStream(@"C:\Users\yiwannuofu\Desktop\\ee.txt", FileMode.Open, FileAccess.Read, FileShare.Read);
}
///如果刚好也有人在操作该文件的时候,指的是有另外一进程在操作该文件,
/// 这里捕获异常继续尝试读取,直至成功,而对应的另一方或几方则睡眠500毫秒再尝试读取
catch (Exception ex)
{ Thread.Sleep(200);
continue;
} byte[] b = new byte[fs.Length];
fs.Read(b, , b.Length);
fs.Flush();
fs.Close(); s = Encoding.UTF8.GetString(b); if (s.Contains("ok"))
{
string BasePath = @"C:\Users\yiwannuofu\Desktop\dd.txt";
StreamWriter sw = new StreamWriter(BasePath);
for (int i= ; i<=; i++)
{
sw.WriteLine(i);
}
sw.Close();
File.Delete(@"C:\Users\yiwannuofu\Desktop\\ee.txt");
break;
}
}
Console.ReadKey(); } private static void ProcessData(object obj)
{
int i = Convert.ToInt32(obj);
string BasePath = @"C:\Users\yiwannuofu\Desktop"; switch (i)
{
case :
BasePath += "\\aa.txt";
break;
case :
BasePath += "\\bb.txt";
break;
case :
BasePath += "\\cc.txt";
break;
}
lock(new object())
{
StreamWriter sw = new StreamWriter(BasePath);
int start = (i - ) * + ;
int end = i * ;
for (int j = start; j <= end; j++)
{
sw.WriteLine(j);
} sw.Close();
i++;
if (i >= )
{ try
{
FileStream sw1 = new FileStream(@"C:\Users\yiwannuofu\Desktop\\ee.txt", FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
byte[] bs = Encoding.UTF8.GetBytes("ok".ToCharArray());
sw1.Write(bs, , bs.Length);
sw1.Flush();
sw1.Close();
}
///出现异常说明也有另外的进程在操作该文件,睡眠500毫秒,再试机写入内容
catch (Exception ex)
{ Thread.Sleep();
}
}
}
}
}
}

多线程协作 FileStream文件读写操作,读写冲突解决的更多相关文章

  1. 【IPHONE开发-OBJECTC入门学习】文件的操作,读写复制文件

    转自:http://blog.csdn.net/java886o/article/details/9041547 FileTools.h FileTools.m #import "FileT ...

  2. git操作之冲突解决

    应用场景,任哥,我两个人共同修改了git项目上的一个文件.zsh命令行模式 准备工作 简写命令解释 gl=git pullgp=git pushgst=git statusgcmsg=git comm ...

  3. [ Python ] 文件的读写操作

    1. 文件读写操作 读写文件是最常见的 IO 操作, Python 内置了读写文件的函数.在磁盘上读写文件的功能是由操作系统提供的,所以读写文件是请求操作系统打开一个文件对象(通常称为文件描述符),然 ...

  4. [转]SVN版本冲突解决详解

    原文地址:http://blog.csdn.net/windone0109/article/details/4857044 版权声明:本文为博主原创文章,未经博主允许不得转载. 版本冲突原因: 假设A ...

  5. SVN版本冲突解决详解

    SVN版本冲突解决详解 分类: SVN(SubVersion)2009-11-23 15:45 27014人阅读 评论(12) 收藏 举报 svnsubversion服务器文档工作c 版本冲突原因: ...

  6. 【转】svn冲突问题详解 SVN版本冲突解决详解

    (摘自西西软件园,原文链接http://www.cr173.com/html/46224_1.html) 解决版本冲突的命令.在冲突解决之后,需要使用svnresolved来告诉subversion冲 ...

  7. svn冲突问题详解 SVN版本冲突解决详解

    svn冲突问题详解 SVN版本冲突解决详解 (摘自西西软件园,原文链接http://www.cr173.com/html/46224_1.html) 解决版本冲突的命令.在冲突解决之后,需要使用svn ...

  8. ASP.NET MVC Filters 4种默认过滤器的使用【附示例】 数据库常见死锁原因及处理 .NET源码中的链表 多线程下C#如何保证线程安全? .net实现支付宝在线支付 彻头彻尾理解单例模式与多线程 App.Config详解及读写操作 判断客户端是iOS还是Android,判断是不是在微信浏览器打开

    ASP.NET MVC Filters 4种默认过滤器的使用[附示例]   过滤器(Filters)的出现使得我们可以在ASP.NET MVC程序里更好的控制浏览器请求过来的URL,不是每个请求都会响 ...

  9. .NET 6学习笔记(1)——通过FileStream实现不同进程对单一文件的同时读写

    会写这篇纯属机缘巧合,虽然一直以来认为对单一文件的读.写操作是不冲突,可并行的,但实际并未实践过.正好有个UWP的程序要并行读取由Desktop Extension创建的文本,需要有个原型程序来验证, ...

随机推荐

  1. ACM学习历程—HDU5701 中位数计数(中位数 && 计数排序)

    http://acm.hdu.edu.cn/showproblem.php?pid=5701 这是这次百度之星初赛2B的第六题.之前白山云做过类似的题,省赛完回来,我看了一下大概就有这样的思路:首先枚 ...

  2. 企业建站系统MiinCMP1.0.5 版公布!

    2014-5-4,在青年节,Juuluu公布了其企业建站系统的新版1.0.5,经过两周多的奋战,Juuluu团队为MiinCMP新浪云版的移植工作做了大量工作.1.0.5已可完美执行于国内免费的jav ...

  3. python中的configparse学习笔记

    configparse主要用于在python中进行配置文件的读取. 基本的读取配置文件: -read(filename) 直接读取ini文件内容 -sections() 得到所有的section,并以 ...

  4. 【openCV学习笔记】【3】高斯模糊一张图片(_cvSmooth相关编译错误)

    代码如下: #include <iostream> #include <opencv/highgui.h> #include <opencv/cv.h> void ...

  5. 一键获取 所有连接过的WIFI密码

    使用方法 一.运行CMD (以及 开启无线网卡.最好是笔记本) 二.输入命令: for /f "skip=9 tokens=1,2 delims=:" %i in ('netsh ...

  6. 上一步是硬件描述语言,下一步是FPGA

    上一步是硬件描述语言,下一步是FPGA. 学习了硬件描述语言(Verilog或者VHDL)之后,FPGA该如何继续. 世上没有捷径,每一步都得踏踏实实的走.学习FPGA也是这样,在有了硬件描述语言的基 ...

  7. 分布式缓存系统 Memcached 内存管理机制

    在前面slab数据存储部分分析了Memecached中记录数据的具体存储机制,从中可以看到所采用的内存管理机制——slab内存管理,这也正是linux所采用的内存高效管理机制,对于Memchached ...

  8. HDU 3018 Ant Trip(欧拉回路,要几笔)

    Ant Trip Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  9. crush class实验

    标签(空格分隔): ceph,ceph实验,crushmap luminous版本的ceph新增了一个功能crush class,这个功能又可以称为磁盘智能分组.因为这个功能就是根据磁盘类型自动的进行 ...

  10. Python中调用设置环境变量的bat

    工作中用到一个python脚本,自动化运行某目录下的多个vc工程代码. 编译工程代码的命令如下,直接运行会失败,系统找不到devenv,我们需要添加devenv.exe所在的目录到环境变量中. os. ...