91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

C++中stdin在多線程環境下的使用

c++
小樊
87
2024-09-10 17:28:19
欄目: 編程語言

在C++中,stdin是一個全局變量,用于從標準輸入(通常是鍵盤)讀取數據

然而,在實際應用中,我們可以使用互斥鎖(mutex)來確保在任何時候只有一個線程能夠訪問stdin。這樣可以避免數據競爭和不一致的問題。

以下是一個簡單的示例,展示了如何在多線程環境下使用stdin

#include<iostream>
#include<thread>
#include <mutex>

std::mutex mtx; // 用于保護stdin的互斥鎖

void read_input(int thread_id) {
    std::unique_lock<std::mutex> lock(mtx); // 獲取互斥鎖
    std::cout << "Thread "<< thread_id << " is reading from stdin: ";
    int input;
    std::cin >> input;
    std::cout << "Thread "<< thread_id << " read: "<< input<< std::endl;
    lock.unlock(); // 釋放互斥鎖
}

int main() {
    std::thread t1(read_input, 1);
    std::thread t2(read_input, 2);

    t1.join();
    t2.join();

    return 0;
}

在這個示例中,我們創建了兩個線程,它們都會調用read_input函數。read_input函數首先獲取互斥鎖,然后從stdin讀取一個整數,并將其打印到控制臺。當線程完成輸入操作后,它會釋放互斥鎖,允許其他線程訪問stdin

需要注意的是,這種方法可能會導致線程饑餓(starvation),因為一個線程可能會長時間等待獲取互斥鎖。為了避免這種情況,可以使用條件變量或其他同步原語來實現更復雜的線程調度策略。

0
辽阳县| 大新县| 宁都县| 寿阳县| 喀喇沁旗| 儋州市| 色达县| 沙湾县| 湖北省| 鄂伦春自治旗| 伊吾县| 揭东县| 正蓝旗| 腾冲县| 建平县| 内黄县| 丰宁| 随州市| 会泽县| 娱乐| 双鸭山市| 尉氏县| 南宁市| 开平市| 河南省| 定远县| 镇赉县| 南岸区| 新野县| 邳州市| 青龙| 昂仁县| 新蔡县| 双辽市| 女性| 炎陵县| 乌拉特前旗| 综艺| 射洪县| 吴江市| 广南县|