首页 > 解决方案 > 按条件分离 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();

}```


标签: multithreadingc++11concurrency

解决方案


推荐阅读