То, что вы хотите сделать, это межпроцессное взаимодействие.Вы начали с создания потоков, но есть немного работы с использованием каналов MPSC (Multi-Producer, Single Consumer), чтобы заставить их общаться с другими.
Надеюсь, этот пример, который запускает ваш метод hello::world()
, поможет:
use std::process::exit;
use std::sync::mpsc;
use std::sync::mpsc::{Receiver, Sender};
use std::thread;
struct Hello {
text: String,
}
impl Hello {
fn world(&self) {
println!("{} World", &self.text);
}
}
static NTHREADS: usize = 3;
fn main() {
let (tx, rx): (Sender<String>, Receiver<String>) = mpsc::channel();
for id in 0..NTHREADS {
// The sender endpoint can be copied
let thread_tx = tx.clone();
// Each thread will send its id via the channel
thread::spawn(move || {
// The thread takes ownership over `thread_tx`
// Each thread queues a message in the channel
let hello_text = format!("hello {}", id);
thread_tx.send(hello_text).unwrap();
// Sending is a non-blocking operation, the thread will continue
// immediately after sending its message
println!("thread {} finished", id);
});
}
// Here, all the messages are received and hello instance is created with the
// data received from the sender aka thread_tx.send command above. From there
// we call world() method
for _ in 0..NTHREADS {
// The `recv` method picks a message from the channel
// `recv` will block the current thread if there no messages available
let text = rx.recv().unwrap();
let hello = Hello {
text: text.to_string(),
};
hello.world();
}
}
Код изменен из этого примера .