728x90
728x170
■ MPSC 채널 메커니즘을 사용해 스레드 간 데이터 공유하기
▶ 예제 코드 (RS)
use std::sync::mpsc;
use std::thread;
use std::time;
fn send_message(source_message : &str, sender : mpsc::Sender<String>)
{
let message_array : [&str; 5] = ["메시지 1", "메시지 2", "메시지 3", "메시지 4", "메시지 5"];
for message in message_array
{
let target_message : String = format!("{} : {}", source_message, message);
sender.send(target_message).unwrap();
thread::sleep(time::Duration::from_millis(1000));
}
sender.send("중단".to_string()).unwrap();
}
fn main()
{
let (tx, rx) = mpsc::channel::<String>();
let sender1 : mpsc::Sender<String> = tx.clone();
thread::spawn(|| { send_message("스레드 1", sender1); });
let sender2 : mpsc::Sender<String> = tx.clone();
thread::spawn(|| { send_message("스레드 2", sender2) });
loop
{
let message : String = rx.recv().unwrap();
println!("[수신] {}", message);
if message == "중단"
{
break;
}
}
}
/*
[수신] 스레드 1 : 메시지 1
[수신] 스레드 2 : 메시지 1
[수신] 스레드 2 : 메시지 2
[수신] 스레드 1 : 메시지 2
[수신] 스레드 1 : 메시지 3
[수신] 스레드 2 : 메시지 3
[수신] 스레드 1 : 메시지 4
[수신] 스레드 2 : 메시지 4
[수신] 스레드 1 : 메시지 5
[수신] 스레드 2 : 메시지 5
[수신] 중단
*/
728x90
그리드형(광고전용)
'Rust > Common' 카테고리의 다른 글
[RUST/COMMON] 크레이트 설치 : async-std (0) | 2023.06.07 |
---|---|
[RUST/COMMON] TCP 프로토콜을 사용해 간이 채팅 프로그램 만들기 (0) | 2023.06.05 |
[RUST/COMMON] spawn 함수 : 쓰레드로 병렬 계산 처리하기 (0) | 2023.06.04 |
[RUST/COMMON] Instant 구조체 : elapsed 메소드를 사용해 실행 시간 측정하기 (0) | 2023.06.04 |
[RUST/COMMON] channel 함수 : MPSC 채널 객체 생성하기 (0) | 2023.06.03 |
[RUST/COMMON] Duration 구조체 : from_millis 연관 함수를 사용해 1000 밀리초 Duration 객체 구하기 (0) | 2023.06.03 |
[RUST/COMMON] sleep 함수 : 쓰레드 대기하기 (0) | 2023.06.03 |
[RUST/COMMON] spawn 함수 : 쓰레드 생성하기 (0) | 2023.06.03 |
[RUST/COMMON] Chars 구조체 : next 메소드를 사용해 다음 문자 구하기 (0) | 2023.06.01 |
[RUST/COMMON] String 구조체 : chars 메소드를 사용해 반복자 구하기 (0) | 2023.06.01 |