我正在写一个套接字服务器,它接收许多客户端请求写入文件。我有一个arraylist来存储socketlisteners。在我运行客户端以发送多达25个请求之后,套接字服务器存储了25个套接字侦听器,并启动了25个线程来接收数据并写入文件。运行后,我从服务器收到错误消息,它试图访问被另一个进程锁定的同一文件。我也得到空引用错误。因此,什么是同步线程的最佳方法,以便所有请求都得到处理,所有数据都写入文件。

任何帮助表示赞赏。谢谢。 -CR

string data = Encoding.ASCII.GetString(byteBuffer,0, size);

if (!File.Exists(filepath))
{
    using (StreamWriter sw = File.CreateText(filepath))
    {
        sw.WriteLine(data);
    }
}
else
{
    using (StreamWriter sw = File.AppendText(filepath))
    {
        sw.WriteLine(data);
    }
}

最佳答案

在这种情况下,最好将对文件的访问序列化,并通过同步队列将所有写请求转发到单独的线程,这有两个主要原因:


从多个线程向机械磁盘上​​的单个文件进行写入/读取不会产生任何性能上的好处(如果有很多线程,您甚至会发现性能下降)。
您将避免很多同步问题,尤其是在使用诸如ConcurrentQueue之类的预定义同步队列之一时。

07-27 19:55