锁定输入和输出数据

时间:2015-08-18 12:18:30

标签: c# multithreading

我有主要和工作线程。在主任务结束之前,这些工作线程不能停止(即我不能用Thread.Start()重新创建它们)。这些工作线程从主线程读取数据,然后写入其他数据,然后将主线程写入文件中 我必须使用NET 3.5,不包括ThreadPool和BackgroundWorker

  

InFile - > RawData - >工作 - > ReadyData - > OutFile将。

    public func(string InputFile,string outputFile) {
    ...
    for(int i=0;i<ThreadCount;i++)
    {
        CompressorThreads[i] = new Thread(new ParameterizedThreadStart(CompressBlock));
        ThreadParam thr = new ThreadParam(i);
        CompressorThreads[i].Start(thr);
    }
    int count;
    while (InputFile.Position < InputFile.Length)
    {
        for (int i = 0; i < ThreadCount; i++)
        {
            count = InputFile.Read(buffer, 0, BLOCK_SIZE);
            RawData[i] = new byte[count];
            /*here activating(start) thread*/
        }
        for (int i = 0; (i < ThreadCount) && (CompressorThreads[i] != null);)
        {
            /*prevent(pause) working thread from changing CompressedData*/
            OutputFile.Write(CompressedData[i], 0, CompressedData[i].Length);
        }

    }
    ...
}
private static void CompressBlock(object BlockProperties)
{
    ThreadParam Block = BlockProperties as ThreadParam;
    int ThreadId = Block.ThreadId;
    while (true)
    {

        if(RawData[ThreadId].Length == 0)
        {
            break;
        }
        ...
        /*working here*/
        ...
        /*then save data to CompressedData*/
        /*pause thread*/
    }
}

我试过AutoResetEvent,但这个问题似乎不合适。我在寻找什么?

0 个答案:

没有答案