我正在编写一个套接字服务器,它接收许多客户端请求写入文件。我有一个数组列表来存储套接字监听器。在我运行客户端发送多达 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 .
关于c# - 如何同步套接字服务器中的线程以写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9927109/