双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

我有点懵了,这么做会被卡住吗?线程玩的熟的帮忙看看。

weixi2864 weixi2864 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

class Threadpool {

std::atomic_bool isPoolRunning_;

std::mutex taskQueMtx_; 

std::condition_variable notEmpty_;

...

}

 

析构函数

Threadpool::~Threadpool() {
isPoolRunning_ = false;
notEmpty_.notify_all();
①std::unique_lock<std::mutex> lock(taskQueMtx_);
②exitCond_.wait(lock, [&]()-> bool { return threads_.size() == 0; });
}

 

线程函数

void Threadpool::threadFunc(int threadid)
{
auto lastTime = std::chrono::high_resolution_clock().now();

while(isPoolRunning_) {
③std::shared_ptr<Task> task;
//获取到任务,顺利释放锁
{
//要操作线程队列,先获取锁
④std::unique_lock<std::mutex> lock(taskQueMtx_);
std::cout << "tid=" << std::this_thread::get_id() << " 尝试获取任务" << std::endl;

......

}

 

有一套多线程的代码

我感觉退出的时候有互锁的可能性

主线程:到析构了①首先抢夺了锁

然后②陷入等待,但是锁没有释放

 

这时候如果子线程正好跑到③的位置

那是不是到④就互锁了?

 

百思不得其解,哪个高手帮着解释一下

关键是这玩意跑的很好,从来就没出过问题

...全文

相关推荐

C# winform 防止界面卡住 线程 委托

本文将详细阐述如何在C# WinForm应用中防止界面卡住,以及线程和委托在其中的作用。首先,让我们了解一下什么是线程。线程是程序执行的流程,每个进程至少包含一个线程。

yinyongxian

快速解决idea打开某个项目卡住的问题

快速解决idea打开某个项目卡住的问题IDEA是一款功能强大且流行的集成开发环境(Integrated Development Environment),但是有时候在打开某个项目时可能会出现卡住的情况,

weixin_38643401

matlab代码做游戏-hacker-resources:卡住不知道该怎么办?这是有抱负的开发人员的一些gr8资源

matlab代码做游戏黑客资源卡住不知道该怎么办?这里是有抱负的开发人员的一些gr8资源!目录Web开发游戏开发数据科学...还有更多!引导程序和响应式Web设计如何发布您的网站出色的域名和托管服务提

weixin_38705699

卡住

**死锁和竞态条件**:在多线程编程中,资源的不当管理可能导致死锁(两个或多个线程互相等待对方释放资源)或竞态条件(多个线程同时修改共享数据)。使用互斥锁、信号量或其他同步机制可以避免这类问题。5.

王萌昊

记一次 Spring Boot 项目启动卡住问题排查记录.docx

Spring Boot 项目启动卡住问题的排查记录2. 如何使用 jstack 工具来查看当前应用的线程上下文信息3. IDEA 本地开发环境中的线程上下文信息查看工具4.

小小哭包
评论 7
收藏 已收藏
分享
返回顶部
weixi2864
C++ 语言 65,214 成员 250,514 内容