C++挂起线程,然后通过其他线程重新激活

C++ suspend a thread and reactivate via a different thread

本文关键字:线程 新激活 激活 挂起 然后 C++ 其他      更新时间:2023-10-16

我没有做太多的多线程,所以我不知道如何搜索这个问题。它可能已经回答了,我只是不知道我在寻找什么。

基本上,我希望有一种方法可以在线程执行的特定点挂起线程。然后,我希望能够在线程通过其他线程挂起后立即恢复线程。

窗户上有这样的东西吗?

尝试使用 std::condition_variable。条件变量是可用于阻止线程的"同步原语"。您可以在此处找到有关条件变量的更多信息:http://en.cppreference.com/w/cpp/thread/condition_variable

下面是演示相关行为的快速C++程序的示例。您可以阻止和取消阻止来自另一个线程的线程,如下所示:

#include<iostream>
#include<thread>
#include<condition_variable>
#include<mutex>
std::condition_variable cv;
std::mutex lock;
void foo(){
        std::unique_lock<std::mutex> ulock(lock);
        cv.wait(ulock);
        std::cout<<"Thread Complete"<<std::endl;
}
void bar(){
        cv.notify_all();
}
int main()
{
        std::thread first(foo);
        std::thread second(bar);
        first.join();
        second.join();
        return 0;
}

抱歉,但只是做

#include<iostream>
#include<thread>
#include<condition_variable>
#include<mutex>
std::condition_variable cv;
std::mutex lock;
void foo() {
    std::unique_lock<std::mutex> ulock(lock);
    cv.wait(ulock);
    std::cout << "Thread Complete" << std::endl;
}
void bar() {
    cv.notify_all();
}
int main()
{
    std::thread second(bar);
    std::thread first(foo);
    
    first.join();
    second.join();
    return 0;
}

所以例如开始"第二"为..她。。。第一

例如,在视觉工作室中锁定了这个。

(我所期望的,因为我们在有人等待通知之前通知......