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

溫馨提示×

C++中notify與事件驅動編程的關系

c++
小樊
83
2024-08-29 07:56:05
欄目: 編程語言

在C++中,notify通常與事件驅動編程和多線程編程相關。事件驅動編程是一種編程范式,其中程序的執行流程由外部事件(如用戶輸入、網絡消息等)來控制。在這種范式中,程序會等待并響應這些事件,而不是按照預定的順序執行。

notify函數通常與條件變量(condition variable)或者其他同步原語(如互斥鎖、信號量等)一起使用,以實現線程間的通信和同步。當一個線程需要通知另一個線程發生了某個事件時,它可以調用notify函數。被通知的線程可以使用wait函數等待事件的發生。

下面是一個簡單的C++示例,展示了如何使用std::condition_variablenotify實現事件驅動編程:

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

std::mutex mtx;
std::condition_variable cv;
bool ready = false;

void print_id(int id) {
    std::unique_lock<std::mutex> lck(mtx);
    while (!ready) {  // 如果事件尚未發生,則等待
        cv.wait(lck);  // 當前線程被阻塞,等待條件變量被通知
    }
    std::cout << "thread " << id << '\n';
}

void go() {
    std::unique_lock<std::mutex> lck(mtx);
    ready = true;  // 設置事件為已發生
    cv.notify_all();  // 通知所有等待的線程
}

int main() {
    std::thread threads[10];
    for (int i = 0; i < 10; ++i) {
        threads[i] = std::thread(print_id, i);
    }

    std::this_thread::sleep_for(std::chrono::seconds(1));  // 等待1秒
    go();  // 設置事件為已發生,并通知所有等待的線程

    for (auto &th : threads) {
        th.join();
    }

    return 0;
}

在這個示例中,我們創建了10個線程,每個線程都在等待一個事件(ready變量變為true)。主線程在1秒后設置事件為已發生,并調用notify_all函數通知所有等待的線程。這樣,所有線程都會收到通知,并繼續執行。

0
舒城县| 阿克陶县| 天门市| 东乡| 石棉县| 华容县| 佳木斯市| 两当县| 蓬莱市| 玉田县| 江华| 枣庄市| 城口县| 杂多县| 额敏县| 晋州市| 新干县| 龙岩市| 江西省| 修水县| 商都县| 同江市| 柏乡县| 岳普湖县| 陆川县| 信丰县| 阳高县| 武安市| 太保市| 株洲市| 铁岭市| 五峰| 安丘市| 即墨市| 汉中市| 太湖县| 岳普湖县| 云浮市| 赤城县| 临颍县| 新化县|