线程问题
Threading issue
我正在阅读布鲁斯·埃克尔(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";
}
它悬挂并且不打印"消息"。我在做什么错?
您的程序以函数为主而结束,并且两个线程都被中断。将睡眠添加到主功能的末端。
相关文章:
- 使用 ubuntu 终端在 c++ 上运行线程类的问题
- C++线程安全:如果只有一个线程可以写入非原子变量,但多个线程从中读取. 会遇到问题吗?
- 尝试从头开始实现Leetcode的FizzBuzz多线程问题。收到"libc++abi.dylib: terminating"错误
- 餐饮哲学家问题 - 只有 2 个线程工作
- 线程过程中的线程同步问题
- 在 C++ 的 Qt 中使用 WINAPI 线程时出现问题
- 线程和互斥锁的使用有什么问题
- 并发问题:如何只有一个线程通过关键部分
- MFC执行线程问题
- 在多线程函数中返回共享的常量指针会导致计时问题吗?
- C++多线程生产者-消费者问题
- C++ 多线程中的锁和条件变量问题
- 线程清理器检测到数据争用,问题出在哪里?
- 编译问题 C++ 同时,尝试通过调用另一个对象中的成员函数来创建 std:: 线程
- 多线程与线程小问题
- 线程池 C++ 实现问题
- 提升线程问题,当一个线程与另一个线程没有相同的副本时如何共享变量?
- 如何修复macOS线程互斥锁性能缓慢的问题?
- 多线程概念问题
- 迷宫构造函数问题 [线程 1:EXC_BAD_ACCESS(代码 = 1,地址 = 0x8)]