チャンネル経由でカスタム構造体を送信するのに苦労しています。チャネルを介して構造体を送信できません:mpsc :: Senderはスレッド間で安全に共有できません
Arc
とMutex
の値をチュートリアル に記載されているようにラップしましたが、とにかくコンパイルされません。
extern crate num;
use num::bigint::BigInt;
use std::io::{self, Write};
use std::sync::mpsc;
use std::thread;
use readline::readline as ask;
use std::sync::{Arc, Mutex};
enum Command {
Quit,
Help,
Factorial { n: BigInt },
Error { msg: String },
}
fn main() {
let (input_tx, input_rx) = mpsc::channel();
let input_thread = thread::spawn(|| {
input_tx.send(Arc::new(Mutex::new(Command::Quit)));
});
}
error: the trait bound `std::sync::mpsc::Sender<std::sync::Arc<std::sync::Mutex<Command>>>: std::marker::Sync` is not satisfied [E0277]
let input_thread = thread::spawn(|| {
^~~~~~~~~~~~~
help: run `rustc --explain E0277` to see a detailed explanation
note: `std::sync::mpsc::Sender<std::sync::Arc<std::sync::Mutex<Command>>>` cannot be shared between threads safely
note: required because of the requirements on the impl of `std::marker::Send` for `&std::sync::mpsc::Sender<std::sync::Arc<std::sync::Mutex<Command>>>`
note: required because it appears within the type `[[email protected]/main.rs:25:38: 65:6 input_tx:&std::sync::mpsc::Sender<std::sync::Arc<std::sync::Mutex<Command>>>]`
note: required by `std::thread::spawn`
error: aborting due to previous error
私は錆1.10.0(cfcb716cf 2016年7月3日)を使用しています。
注:チャネル内で値をラップしましたが、コンパイラはここでラッピングされていないチャネルの*送信側*について不平を言っています。 –