multithreading - 按条件分离 std::threads
问题描述
基于优先级调用线程的程序
我正在尝试将线程作为优先级 1 和其他优先级线程(1 除外)运行,
在这里,线程 t2 的优先级为 2,3 个线程 t1、t2 和 t3 处于等待状态。线程 t4 去调用优先级为 2 的信号。 //-我希望它只调用优先级不是 1 的线程
这个程序的输出是
单个 notifyall
两个 notifyall
cv.wait(master);
priority1
cv1.wait(master);
priority2
cv.wait(master);
优先级1
这是我所期望的,我正在寻找这种行为的解释,因为我认为 notify_all() 将通知所有线程,因此所有线程都应该得到通知,而不是优先级 1 线程或其他优先级线程
#include <condition_variable>
#include <thread>
#include <chrono>
using namespace std;
std::condition_variable cv;
std::condition_variable cv1;
std::mutex cv_m;
void waits(int priority)
{
std::unique_lock<std::mutex> master(cv_m);
if(priority == 1){
cv.wait(master);
std::cout<<"cv.wait(master);"<<std::endl;
}
else {
cv1.wait(master);
std::cout<<"cv1.wait(master);"<<std::endl;
}
std::cout<<"priority"<<priority<<std::endl;
master.unlock();
}
void signals(int priority)
{
switch (priority){
case 1:
std::cout<<"both notifyall"<<std::endl;
cv.notify_all();
cv1.notify_all();
break;
case 2:
std::cout<<"single notifyall"<<std::endl;
cv1.notify_all();
break;
}
}
int main()
{
std::thread t1(waits,1), t2(waits,2), t3(waits,1), t4(signals,2),t5(signals,1);
t1.join();
t2.join();
t3.join();
t4.join();
t5.join();
}```