我正在写一个套接字服务器,它接收许多客户端请求写入文件。我有一个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之类的预定义同步队列之一时。