첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
------------------------------------------------------------------------------------------------------------------------------------------------------
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
그리드형(광고전용)
Posted by icodebroker
,