c++多线程挂起与唤醒

基本思想:自用脚本,可实现c++多线程之间挂起与唤醒

CMakeLists.txt

cmake_minimum_required(VERSION 3.16)
project(test_tcp)
set(CMAKE_CXX_STANDARD 14)
add_executable(test_tcp main.cpp)
target_link_libraries(test_tcp -lpthread)

#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;

const int max_size = 1;
int products= 0;
std::mutex product_mutex;
std::condition_variable cv;

void Productor() {
    int num = 0;
    while(true) {
        std::unique_lock<std::mutex> lk(product_mutex);
        cv.wait(lk, []() { return products== 0; });
        cout << "生产线程id: " << std::this_thread::get_id() << endl;
        while (true){
            std::this_thread::sleep_for(1000ms);
            //摄像头1 
            std::cout<<"camera 1"<<std::endl;
            break;
        }
        products=1;
        lk.unlock();
        cv.notify_all();
    }
}

void Consumer() {
    while (true) {
        std::unique_lock<std::mutex> lk(product_mutex);
        cv.wait(lk, []() { return products==1; });
        cout << "消费线程id:"<<std::this_thread::get_id()<< endl;

         while (true){
                    std::this_thread::sleep_for(3000ms);
                    //摄像头2
                    std::cout<<"camera 2"<<std::endl;
                    break;
                }
                products= 2;
      			lk.unlock();
        		cv.notify_all();
    }
}

void Consumer1() {
    while (true) {
        std::unique_lock<std::mutex> lk(product_mutex);
        cv.wait(lk, []() { return products==2; });
        cout << "消费线程id:"<<std::this_thread::get_id()<< endl;

        while (true){
            std::this_thread::sleep_for(3000ms);
            //摄像头2
            std::cout<<"camera 3"<<std::endl;
            break;
        }
        products= 0;
        lk.unlock();
        cv.notify_all();
    }
}

int main()
{
    thread th1(Productor);
    thread th2(Consumer);
    thread th3(Consumer1);
    th1.join();
    th2.join();
    th3.join();
}

你可能感兴趣的:(c++基础,c++)