rust - 如何在 Arc 中使用 TcpStream
问题描述
我有一个TcpStream
,并且我正在尝试创建一个专用线程来读取,TcpStream
并且主线程应该只进行写入,所以我将TcpStream
Arc 包裹在内部以共享所有权。这是我的代码
fn main() {
let mut tcp_stream = TcpStream::connect("127.0.0.1:8080").unwrap();
let tcp_stream = Arc::new(&mut tcp_stream);
}
fn read_from_stream(tcp_stream: Arc<&mut TcpStream>) {
let mut buffer = String::new();
tcp_stream.read_to_string(&mut buffer);
}
我收到错误Cannot borrow data in Arc as mutable。但是tcp_stream
为了调用read_to_string
方法需要是可变的。我应该怎么做才能完成这项工作?
解决方案
虽然Arc
确实抑制了可变性,但在这种情况下这不是问题,因为&TcpStream
实现 Read
了.
因此,您可以包装TcpStream
(不是&mut TcpStream
)Arc
并调用通过以下方式获得read_to_string()
的共享&TcpStream
引用Arc::as_ref()
:
fn main() {
let tcp_stream = TcpStream::connect("127.0.0.1:8080").unwrap();
let tcp_stream = Arc::new(tcp_stream);
}
fn read_from_stream(tcp_stream: Arc<TcpStream>) {
let mut buffer = String::new();
tcp_stream.as_ref().read_to_string(&mut buffer);
}
推荐阅读
- azure-devops - 使用从 UI 中的资源中选择的工件手动运行 YAML 构建管道将被忽略
- javascript - react-native 中的重复组件
- javascript - Github API 响应复制到 javascript 对象 Angular 应用程序
- reactjs - 是的,没有使用 Formik,也没有提供任何类型的错误
- android - 如何在颤振的小部件中加载(显示)大图像的一部分?
- assembly - x86 binarySearch 实现中的分段错误
- r - RAM 内存使用和管理:R 与 Power BI。为什么 Power Bi 在同一台计算机上处理大型数据集似乎比 R 更好?
- typescript - VSCode 扩展在调试模式下工作正常,但在发布时无法正常工作
- react-native - latlng 不能为空,需要一个位置。反应原生
- condor - HTCondor:在提交文件中,如何评估变量的值以便将其写入输出文件名?