condition_variable的使用模版

#include <condition_variable>
#include <iostream>
#include <mutex>
#include <string>
#include <thread>
#include <queue>
 
std::mutex m;
std::condition_variable cv;
std::string data;
bool ready = false;
bool processed = false;
std::queue<int> q;
 
void recv_thread()
{
    // wait until main() sends data
    std::unique_lock lk(m);
    while(true) {        
        cv.wait(lk);
        std::cout << "worker wakeup" << std::endl;
        while(q.empty() == false) {
            int r = q.front();
            q.pop();
            std::cout << r << std::endl;
        }
    }
}

void send_thread() {
    std::this_thread::sleep_for(std::chrono::milliseconds(200));
    for(int i = 0; i < 100; i++) {
        {
            std::lock_guard lk(m);
            q.push(i);

        }
        std::this_thread::yield();
        cv.notify_one();
    }
}
 
int main()
{
    std::thread t1(&recv_thread);
    std::thread t2(&send_thread);
    t2.join();
    std::cout << "sender exited" << std::endl;
    t1.join();
    std::cout << "exit" << std::endl;
    return 0;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容