我正在使用 boost.asio 编写服务器。我已经为每个连接读取和写入缓冲区并使用异步读/写函数(async_write_some
/async_read_some
)。
有了read buffer和async_read_some
,就没有问题了。只需调用 async_read_some
函数就可以了,因为读取缓冲区在读取处理程序中是只读的(通常意味着在同一线程中)。
但是,写入缓冲区需要从多个线程访问,因此需要锁定以进行修改。
第一个问题!
有什么方法可以避免写入缓冲区出现 LOCK 现象吗?
我将自己的数据包写入堆栈缓冲区并将其复制到写入缓冲区。然后调用async_write_some
函数发送数据包。这样,如果我连续发送两个数据包,是否可以调用两次async_write_some
函数?
第二个问题!
socket编程中常见的异步写法是什么?
感谢阅读。
最佳答案
抱歉,您有两个选择:
使用锁或更好的方式序列化写入语句 启动一个单独的编写器线程,从中读取请求 一个队列,然后其他线程可以在队列上堆叠请求 没有太多争用的队列(需要一些互斥)。
给每个写线程它自己的套接字! 如果程序在另一端,这实际上是更好的解决方案 电线可以支持它。
关于c++ - 关于一般网络编程中的write buffer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1237259/