我正在努力了解如何最好地實作我在 c 中使用的常見并發模式。
偽代碼:
void kernel(inputs, outputs, start, stride) {
for (size_t i = start; i < length(inputs); i ) {
outputs[i] = process(inputs[i]);
}
}
void run(inputs, number_of_threads) {
threads = []
vector outputs(length(inputs))
for (int i = 0; i < number_of_threads; i {
threads.push(thread(kernel, inputs, &outputs, i, number_of_threads));
}
for t in threads {
t.join()
}
return outputs
}
也就是說,通過跨越輸入空間對大量輸入執行某些功能。它是完全并行的,從不存在競爭條件等。但是對于 rust 的所有權模型,每個內核都需要對輸出的可變參考,所以我不明白它是如何作業的。
在 Rust 中解決這個簡單問題的安全方法是什么?
uj5u.com熱心網友回復:
您可以使用splice::split_at_mut將陣列分成單獨的子切片,每個子切片都有自己的可變參考。您可以將第一個切片傳遞給scope'd 執行緒,然后繼續拆分第二個切片。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/526392.html
標籤:多线程锈并行处理
