两个线程在同一个列表上工作

时间:2016-05-13 05:35:25

标签: c# multithreading networking

我正在使用C#开发P2P应用程序。 它是一个带文件分割和文本聊天的文件传输。

在客户端上有2个线程,1个用于监听,1个用于发送。 当我发送文件时,它首先拆分成10个,这10个被添加到客户端的发送队列中,然后开始发送文件块1。 但现在我想通过同一个管道发送消息。 我的想法是在文件块2之前将该消息插入发送列表。 我需要什么样的线程才能让2个线程在同一个列表上工作? 我已经考虑过以这种方式收到的物品了。

我对发送功能的初步想法是这样的:

public void Send()
{
    while (IsConnected())
    {
        if (unSentObjects.Count > 1)
        {
            Task sendTask = new Task(() => SendObj(unSentObjects[0]));
            sendTask.Start();
        }
    }
}

1 个答案:

答案 0 :(得分:0)

您可以使用Synchronization Object(例如互斥锁)来防止竞争条件或同时写入/读取同一文件。基本上只有一个线程可以访问该对象。

如果数据是线程的全局数据并且它们都是处理过程,则可以使用同步对象简单地指示何时使用全局共享数据以及何时不使用它。除了使用共享全局数据的情况完全相同之外,您只是贩卖它的使用。