gpt4 book ai didi

c# - .NET C# socket 在两个不同的线程上发送

转载 作者:行者123 更新时间:2023-11-30 20:35:52 26 4
gpt4 key购买 nike

我有一个套接字,可以在单个线程中接收和发送。但是,存在另一个线程可以周期性地使用套接字发送数据。目前,我正在使用一个共享对象来锁定我的 Socket.send() 操作。这个锁有必要吗?如果是,即使我只从一个线程接收,我是否也需要锁定我的接收方法?

例如在线程 1 中:

//...some code
while (offset< len)
{
currentBytesRead += Client.Receive(buf, offset, len - offset, SocketFlags.None);
}
//...some more code...
lock (lockObject)
{
Client.Send(outputByte);
}

在线程 2 中:

    lock (lockObject)
{
Client.Send(outputByte);
}

最佳答案

Socket 的文档中所述类,此类的实例是线程安全的。因为套接字代表双工连接——你可以安全地在不同的线程上发送和接收。您也可以在不锁定的情况下从多个线程发送数据,但请注意,在这种情况下不能保证顺序(因此,如果您使用多个发送操作发送单个逻辑结构 - 您需要锁定它们以免相互干扰)。

但是请注意,如果您通过发送一些数据作为响应对收到的一些数据使用react - 您需要锁定整个接收-发送 block ,并锁定来自另一个线程的发送。

关于c# - .NET C# socket 在两个不同的线程上发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37459837/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com