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好的,我知道了。我忘了提一件事。我也编辑了上面的例子。我正在创建一个实例并只连接到服务器一次。然后,如果客户端套接字已连接,则我将该已连接套接字与我的所有请求一起使用,这样可以吗