基本思想:自用脚本,可实现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 <iostream>
#include <string>
#include <thread>
#include <mutex>
#include <queue>
#include <condition_variable>
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();
}