Ошибка, связанная с 'static
, связана с тем, что новый поток, созданный в thread::spawn
, может пережить вызов threaded_search
, во время которого поток создается изначально, что означает, что потоку не должно быть разрешено использовать какие-либо локальные переменные из threaded_search
с временем жизни короче 'static
.
В вашем коде новый поток ссылается на strings_as_slice1
и td_arc
.
Обычно с thread::spawn
и Arc
вызахочет перенести владение одним счетчиком ссылок в поток и получить доступ к потоку, что ему нужно, через указатель с подсчетом ссылок, а не непосредственно из внешней кратковременной области.
fn threaded_search(td_arc: &Arc<ThreadData>) {
// Increment reference count that we can move into the new thread.
let td_arc = td_arc.clone();
thread::spawn(move || {
perform_search(&td_arc.vector_of_strings[0..td_arc.quotient], &td_arc.terms);
});
}