溫馨提示×

c++ pause怎樣避免資源浪費

c++
小樊
96
2024-11-30 17:31:49
欄目: 編程語言

在C++中,為了避免使用pause函數導致的資源浪費,您可以考慮以下替代方案:

  1. 使用條件變量(Condition Variable):條件變量是一種同步原語,允許線程等待某個條件成立。當條件滿足時,線程將被喚醒。這樣可以避免忙等待(busy waiting),從而減少資源浪費。
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>

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

void print_block() {
    std::unique_lock<std::mutex> lock(mtx);
    while (!ready) {
        cv.wait(lock); // 忙等待,但不會消耗CPU資源
    }
    std::cout << "Ready!" << std::endl;
}

void set_ready() {
    std::lock_guard<std::mutex> lock(mtx);
    ready = true;
    cv.notify_one(); // 喚醒等待的線程
}

int main() {
    std::thread t1(print_block);
    std::thread t2(set_ready);

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

    return 0;
}
  1. 使用事件(Event):事件是一種同步原語,允許線程等待某個事件發生。當事件發生時,線程將被喚醒。這樣可以避免忙等待,從而減少資源浪費。
#include <iostream>
#include <thread>
#include <windows.h>

HANDLE hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); // 創建事件

void print_block() {
    WaitForSingleObject(hEvent, INFINITE); // 等待事件發生
    std::cout << "Ready!" << std::endl;
}

void set_event() {
    SetEvent(hEvent); // 設置事件,喚醒等待的線程
}

int main() {
    std::thread t1(print_block);
    std::thread t2(set_event);

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

    CloseHandle(hEvent); // 關閉事件句柄

    return 0;
}

這些替代方案可以有效地避免使用pause函數導致的資源浪費。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女