gpt4 book ai didi

parallel-processing - 在 Rust 中,是否可以在多个线程之间共享数据而无需静态生命周期?

转载 作者:行者123 更新时间:2023-11-29 08:35:39 24 4
gpt4 key购买 nike

<分区>

我正在尝试获取一个大字符串或数据并将其分解成多个片段以跨多个线程进行处理。我想利用多线程来帮助处理数据,但希望避免复制数据。

这是问题的一个例子。 Segment0 可以工作,因为它通过副本拥有数据。 Segment1 只是借用数据并会导致问题,即使连接保证了生命周期的正确性。

use std::thread;
use std::fs;
use std::sync::{Arc};

fn main() {
let data = fs::read("./test.txt").unwrap();

let segment_size = data.len()/2;
let segment0 = &data[0..segment_size]; //Borrow data no copy
let segment1 = &data[segment_size..]; //Borrow data no copy

let segment0 = Vec::from(segment0); //has ownership of data through copy

let thread0 = thread::spawn(move || println!("Thread 0 {:?}",std::str::from_utf8(&segment0)));
let thread1 = thread::spawn(move || println!("Thread 1 {:?}",std::str::from_utf8(segment1)));

thread0.join(); //thread 0 terminated segment0 dropped
thread1.join(); //thread 1 terminated segment1 dropped

//data released segment0 and segment1 needed to be dropped before
}

返回的错误

error[E0597]: `data` does not live long enough
--> src/main.rs:10:25
|
10 | let segment1 = &data[segment_size..]; //Borrow data no copy
| ^^^^ borrowed value does not live long enough
...
21 | }
| - borrowed value only lives until here
|
= note: borrowed value must be valid for the static lifetime...

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