线程被ParameterInstance.lockObject锁定,它能工作吗

本文关键字:工作 锁定 ParameterInstance lockObject 线程 | 更新日期: 2023-09-27 18:00:59

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

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

我希望我把自己说得足够清楚,如果不是的话,只是要求更多的细节。

线程被ParameterInstance.lockObject锁定,它能工作吗

看起来您正在编写某种多路复用器。事实上,只要您在单个lock中写入整个有效负载(和长度前缀(,并且lockObject代表互斥资源(即,对于我们不想冲突的所有客户端,必须是公共lockObject(,这应该可以正常工作。

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

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