c# - 如何同步套接字服务器中的线程以写入文件

标签 c# multithreading

我正在编写一个套接字服务器,它接收许多客户端请求写入文件。我有一个数组列表来存储套接字监听器。在我运行客户端发送多达 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);
    }
}

最佳答案

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

  1. 从多个线程写入/读取机械磁盘上​​的单个文件不会产生任何性能优势(如果有很多线程,您甚至会看到性能下降)。
  2. 您将避免很多同步问题,尤其是如果您使用预定义的同步队列之一,如 ConcurrentQueue .

关于c# - 如何同步套接字服务器中的线程以写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9927109/

相关文章:

c# - 我们如何通过在 asp.net 应用程序中单击按钮来清除服务器端缓存?

c# - 为什么 LINQ 无法将 DataRows 添加到 DataTable?

c# - 抽象类中不需要主体的只读接口(interface)?

c# - Moq 可以模拟多简单的实体类 (POCO)?

multithreading - Azure XS 虚拟机上不带 GUI 的 Ubuntu 服务器

java - 是否可以跟踪控制外部程序的线程的进度?

c++ - 为什么从这个函数创建线程时会出错?

C# - 如何获取也是类的类成员的属性?

java - Thread.getStackTrace() 是线程安全的吗?

java - 进程 fork 、子进程等[Java]