2016-05-13 52 views
0

我正在使用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(); 
     } 
    } 
} 

回答

0

你可以使用一个互斥体,防止竞争条件或同步读/写,以相同的文件这样Synchronization Object。基本上只有1个线程将能够访问该对象。

如果数据对于线程是全局数据并且它们都是一次处理的,则可以使用同步对象来简单指示何时使用全局共享数据以及何时不使用全局共享数据。除此之外,使用共享的全局数据是完全一样的,你只是贩运它的使用。

+0

就像一个叫'ItemInUse'的'bool'的标志。该对象需要等待访问它并使用同步对象。您的应用程序的实际数据不会。简单地说,如果'ItemInUse'为false,将其设置为true,然后对数据进行任何操作,然后在完成时将其设置为false。 –

+0

队列是发送者线程本地的,然后线程2将新对象添加到发送队列中。但我不能这样做,因为你说它是一个同时读/写,但没有办法添加一个新的对象发送块1完成后? – BoinQ

相关问题