🐋
Blog
C++
C++
  • C++
  • 基本语法
    • 冷门知识
    • 右值
    • lambda
  • 奇技淫巧
    • 算数上的问题
    • 图存储方式
    • 自定义排序函数
  • 多线程
    • Thread
    • Mutex & Atomic
    • Condition_variable & Semaphore
    • Promise & Future
由 GitBook 提供支持
在本页
  • condition_variable
  • semaphore
  1. 多线程

Condition_variable & Semaphore

condition_variable

condition_variable 能够阻塞一个线程,直至另一个线程修改共享变量并通知 condition_variable。

#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
 
std::mutex mutex;
std::condition_variable cv;
bool flag = true;

void f() {
    std::unique_lock<std::mutex> ul(mutex);
    while (flag) {
        std::cout << "I wait falg" << std::endl;
        // 线程休眠,释放锁。当它醒过来之后会获取锁。
        cv.wait(ul);
    }
    std::cout << "I wake up" << std::endl;
}

int main() {
    std::thread t(f);

    std::this_thread::sleep_for(std::chrono::milliseconds(30));

    int n = 10;
    while (n --) {
        std::cout << "---" << std::endl;
    }
    flag = false;
    // 唤醒随机一个沉睡线程
    cv.notify_one();
    t.join();
}

semaphore

上一页Mutex & Atomic下一页Promise & Future

最后更新于2年前