Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 多线程环境中的静态套接字客户端线程安全_C#_Multithreading_Sockets_Thread Safety - Fatal编程技术网

C# 多线程环境中的静态套接字客户端线程安全

C# 多线程环境中的静态套接字客户端线程安全,c#,multithreading,sockets,thread-safety,C#,Multithreading,Sockets,Thread Safety,我有一个在多线程环境下运行的程序。 在这里,我创建了多个套接字客户端来服务请求。 由于创建新套接字总是代价高昂,所以我为所有请求创建了一个静态套接字客户端。 如下 Class SocketClient { Static Socket=null ; SocketClient() { sender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, Protocol

我有一个在多线程环境下运行的程序。 在这里,我创建了多个套接字客户端来服务请求。 由于创建新套接字总是代价高昂,所以我为所有请求创建了一个静态套接字客户端。 如下

   Class SocketClient
{
    Static  Socket=null ;

SocketClient()
{
    sender = new Socket(AddressFamily.InterNetwork, 
                    SocketType.Stream, ProtocolType.Tcp );
    sender.Connect(,,,,,,)
}

ServeRequest()
{
if(sender.Connected)
  {  
    Sender.send.......
  }   
}

}
我正在创建一个实例,并且只连接到服务器一次。然后,如果客户端套接字已连接,则我将连接的套接字与我的所有请求一起使用,这样就可以了。它是线程安全的吗

这里我是如何从multipl线程中调用它的

SocketClient client=new SocketClient();
 Client.ServeRequest() 

From:这个类的实例是线程安全的。我已经编辑了你的标题。请参阅“”,其中的共识是“不,他们不应该”。@AdrianoRepetti我的问题是,因为我创建了静态实例,所以所有请求将只有一个实例。像那样使用它是线程安全的吗?是的,根据MSDN,它是。这句话意味着可以从多个线程访问实例方法/属性。当然,它的代码是线程安全的,它不会使您的代码是线程安全的(例如,如果您按顺序调用多个方法)。例如:如果(socket.Connected){…oops其他人关闭了连接…}。例如,多个线程可以同时在其上写入。如果你需要更多的东西,就在它周围放一把锁。@AdrianoRepetti好的,我知道了。我忘了提一件事。我也编辑了上面的例子。我正在创建一个实例并只连接到服务器一次。然后,如果客户端套接字已连接,则我将该已连接套接字与我的所有请求一起使用,这样可以吗