1

我用谷歌搜索了很多,但没有找到答案。我正在编写我自己的小 Tcp 库以方便自己使用。在服务器上,我有一个“ConnectedClient”对象,它有一个套接字和一个网络流。在服务器静态类上,我有一个发送以长度为前缀的流的发送函数。我希望流是线程安全的,但对于每个客户端。这会为此工作吗?

Send(ConnectedClient client, ...(rest of parameters nor relevant))
{
lock (client.lockObject)
{
// Writing to stream thread-safely I hope...
}
}

我希望我说得足够清楚,如果没有,请询​​问更多细节。

4

1 回答 1

1

看起来您正在编写某种多路复用器。实际上,只要您在单个lock.不想碰撞)。lockObjectlockObject

也许更棘手的问题是:您是要在该方法中读取回复(成功/返回值/关键失败),还是要异步读取回复,并让下一个写入者在第一个写入流中写入消息在飞...

为了比较,在编写BookSleeve(一个 redis 多路复用器,如果您需要一些参考代码,可以使用完整源代码)时,我选择了一种不同的策略:一个专用线程来完成对线程的所有写入,所有调用者只是附加到一个线程-安全队列;这样,即使有工作积压,调用者也不会被延迟。

于 2011-07-04T18:08:32.407 回答