线程问题

Threading issue

本文关键字:问题 线程      更新时间:2023-10-16

我正在阅读布鲁斯·埃克尔(Bruce Eckel)的书" C 的思考",第1卷。2在第11章中进行练习13时,我遇到了一个问题。

练习13:创建两个可运行的子类,一个带有run()启动和调用wait()的run()。另一类的运行()应捕获第一个可运行的对象的引用。它的运行()应在一秒钟传递后,应调用第一个线程的第一个线程,以便第一个线程可以打印消息。

可运行的类来自zthreads库。

这是我的代码:

#include <iostream>
#include "zthread/Runnable.h"
#include "zthread/Condition.h"
#include "zthread/Mutex.h"
#include "zthread/Guard.h"
#include "zthread/CountedPtr.h"
#include "zthread/Thread.h"
class Class1: public ZThread::Runnable {
    ZThread::Mutex lock;
    ZThread::Condition condition;
public:
    Class1(): condition(lock) {}
    void run() {
        ZThread::Guard<ZThread::Mutex> g(lock);
        std::cout << "Class1::run()n";
        condition.wait();
        std::cout << "Messagen";
    }
    void continue1() {
        ZThread::Guard<ZThread::Mutex> g(lock);
        std::cout << "Class1::continue1()n";
        condition.signal();
    }
};
class Class2: public ZThread::Runnable {
    ZThread::CountedPtr<Class1>& c;
public:
    Class2(ZThread::CountedPtr<Class1>& c1): c(c1) {}
    void run() {
        std::cout << "Class2::run()n";
        ZThread::Thread::sleep(2000);
        std::cout << "Calling continue1()n";
        c->continue1();
        std::cout << "Exiting Class2::run()n";
    }
};
int main() {
    ZThread::CountedPtr<Class1> c(new Class1);
    std::cout << "Starting thread 1n";
    ZThread::Thread t1(c);
    std::cout << "Starting thread 2n";
    ZThread::Thread t2(new Class2(c));
    std::cout << "exitn";
}

它悬挂并且不打印"消息"。我在做什么错?

您的程序以函数为主而结束,并且两个线程都被中断。将睡眠添加到主功能的末端。