高效退出多线程应用程序(具体)

2023-12-23

我已经阅读了一些有关将消息从线程冒泡到所有其他线程以优雅退出的正确方法的资料(每个线程执行其自己的退出例程)。其中,我喜欢全局原子布尔值的想法,它可以从任何线程进行标记,并且所有其他线程检查此标记以执行退出例程 - 当所有线程都加入时,主线程可以退出应用程序。

纯粹的计算线程可能会有不同的处理方式,对吗?

这样高效、安全吗?有一个更好的方法吗?

Thanks!


我不喜欢线程检查布尔(或其他)状态变量来知道何时做什么,因为这是浪费。线程必须旋转,不断检查变量以查看是否有新指令。这会烧毁CPU。

更好的选择是创建一个信号量或在 Windows 中创建一个事件,并让所有线程等待该信号量。线程可以在不忙时休眠,并且不会从其他执行实际工作的线程中窃取时间片,只是为了检查变量。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

高效退出多线程应用程序(具体) 的相关文章

  • 为什么在排序输入上插入到树中比随机输入更快?

    现在我一直听说从随机选择的数据构建二叉搜索树比有序数据更快 这仅仅是因为有序数据需要显式重新平衡以将树高度保持在最低限度 最近我实现了一个不可变的treap http en wikipedia org wiki Treap 一种特殊的二叉搜
  • 从 unsigned char* 到 char* 的转换无效

    这是一个代码 1 int main int argc char argv 2 3 signed char S psc 4 unsigned char U pusc 5 char C pc 6 7 C S 8 C U 9 10 pc psc
  • 如何在 Asp.Net Core 6 中向类型化 HttpClient 添加承载令牌身份验证

    我正在尝试使用 ASP Net Core 6 设置一个 Web api 以便用户可以到达我的端点 然后我使用特权帐户在幕后的 D365 中执行一些工作 我正在使用类型化的 HTTP 客户端 但我不确定如何插入承载身份验证 以便来自该客户端的
  • 如何准备sql语句并绑定参数?

    不幸的是 文档 http www sqlite org完全缺乏示例 这真的很奇怪 就好像它假设所有读者都是优秀的程序员一样 然而 我对C 并且无法真正从文档中弄清楚如何真正准备和执行语句 我喜欢它的实施方式PDO for PHP 通常 我只
  • C# 中输入按键

    我尝试了这段代码 private void textBox1 KeyPress object sender KeyPressEventArgs e if Convert ToInt32 e KeyChar 13 MessageBox Sho
  • 如何将 mat 转换为 array2d

    我为dlib http dlib net face landmark detection ex cpp html那里的面部地标代码使用 array2d 来获取图像 但我喜欢使用 Mat 读取图像并转换为 array2d 因为 dlib 仅支
  • 如何进行Visual Studio格式字典初始化?

    所有 Visual Studio 也包括 2012 不格式化以下内容 messageProcessor new Dictionary
  • 在 T4 代码生成中,如何从引用的程序集中获取类型?

    由于 T4 在项目上下文之外运行 因此我无权访问当前程序集或其他程序集 如何注册对引用程序集的访问 然后从中获取类型 我猜您想访问项目中建筑物的程序集 我在下面的示例代码中所做的是将一个名为 TestLib 的项目添加到我的解决方案中 我将
  • 仅针对某些异常类型中断

    我知道异常处理是一件非常重要的事情 我们在所有项目中都在这样做 主要原因是记录客户发生的错误 这工作正常 根本不是问题 但是 当我仍在使用 Visual Studio 编码和运行应用程序时 我根本不需要任何异常处理 我希望调试器正好停在应用
  • 使用 (float&)int 进行类型双关可以正常工作,(float const&)int 会像 (float)int 一样转换吗?

    VS2019 发布 x86 template
  • 使用 ClosedXML 附加到 excel 文件

    我需要将新数据附加到使用 ClosedXML 创建的现有 Excel 文件中 如何使用 ClosedXML 附加到 Excel 文件 如何获取最后一条记录的行号并将其附加到该行号上 或者还有其他内容 Thanks 打开现有工作簿 然后使用L
  • VS C# 中的依赖地狱,找不到依赖项

    我创建了一个图表 C 库 我们称之为chartlibrary 它本身依赖于多个第三方 dll 文件 在另一个可执行项目中 我们称之为chartuser 我参考了chartlibrary项目 两个项目位于 Visual Studio 中的同一
  • 多个包含带有变量定义的头文件

    我只是构建一个简单的 C 项目 代码如下所示 head h ifndef HEAD H define HEAD H int my var 100 endif src1 cpp include head h src2 cpp include
  • 什么是 C++11 扩展 [-Wc++11-extensions]

    我需要一些帮助来了解此错误发生的位置 警告 非静态数据成员的类内初始化是 C 11 扩展 Wc 11 extensions 这是它来自的代码部分 typedef struct Hand bool straight false bool fl
  • 为什么将未使用的返回值转换为 void?

    int fn void whatever void fn 是否有任何理由将未使用的返回值强制转换为 void 或者我认为这完全是浪费时间 David s answer https stackoverflow com questions 68
  • 为什么 getch 不可移植?

    是什么使得 getch 本质上无法作为标准 C 函数包含在内 对于控制台界面来说 它是如此直观和优雅 如果没有它 要求输入单个字符总是会产生误导 因为用户可以输入多个键 更糟糕的是 您经常需要确保在读取控制台输入后清除标准输入 这甚至不是作
  • 查找文本文件中每行的行大小

    如何计算每行中的字符或数字数量 是否有类似 EOF 的东西更像是行尾 您可以遍历行中的每个字符并不断增加计数器直到行尾 n 遇到 确保以文本模式打开文件 r 而不是二进制模式 rb 否则流不会自动将不同平台的行结束序列转换为 n 人物 这是
  • 如何在c#中获取斐波那契数

    伙计们 我有一个关于斐波那契的问题 如何获得斐波那契数列 该数字也将以用户输入结束 例如 如果我输入 21 则输出必须为 0 1 1 2 3 5 8 13 21 这是我的代码 static void Main string args int
  • 从 git 签出后 nuget dll 丢失

    I have a C solution containing different projects On those projects I have some normal nuget packages like Newtonsoft Js
  • 从最大到最小的3个整数

    我是 C 初学者 我使用 编程 使用 C 的原理与实践 第二版 问题如下 编写一个程序 提示用户输入三个整数值 然后以逗号分隔的数字顺序输出这些值 如果两个值相同 则应将它们排列在一起 include

随机推荐

  • 如何自定义 virtualenv shell 提示符

    如何定义激活时使用的自定义提示Python虚拟环境 https pypi python org pypi virtualenv 我有一个 bash 脚本 用于激活调用特定时使用的 virtualenvFabric http docs fab
  • Spring Boot JPA 存储库类的 Byte Buddy 运行时生成

    我在用字节好友生成 JPA 实体和 JPA 存储库 我能够生成 JPA 实体 但无法继续生成相应的 JPA 存储库 以下是代表 Person 实体的代码 import javax persistence Entity public clas
  • IBM MQSeries 与 Tomcat 的连接池

    我们正在尝试建立从 tomcat 到 IBM MQSeries 的 jms 连接 并考虑建立连接池 我们点击了下面的链接 并提供了建议的解决方案 使用 Tomcat 的 WebSphere MQ 连接池 https stackoverflo
  • 为什么 perfmon 看不到我的自定义性能计数器的实例?

    我正在为应用程序创建一些自定义性能计数器 我编写了一个简单的 C 工具来创建类别和计数器 例如 下面的代码片段基本上就是我正在运行的代码片段 然后 我运行一个单独的应用程序 不断刷新计数器的原始值 当它运行时 计数器和虚拟实例会在本地的 p
  • 听向上/向下滚动?

    我正在构建一个应用程序 ES6 我很好奇捕获向上 向下滚动事件的 正确 方法是什么 我尝试 npm 安装react scroll listener 但我无法让它与我的ES6类一起工作 基本上我想要 如果向上滚动 则执行此操作 如果向下滚动
  • 在R中添加具有连续数字的列

    如果这个问题非常简单 我深表歉意 但我正在寻找一种方法 将一列连续整数添加到数据帧中 如果我的数据帧有 200 个观察值 例如 第一个观察值从 1 开始 并且最后一个以 200 结尾 我怎样才能做到这一点 对于数据框 df 您可以使用 df
  • Angular 2 表单验证,minLength 验证器不起作用

    我有以下 Angular 2 形式
  • SQL 更新 - 多列

    我想使用第二个表中的值来更新表中的多个列Select语句来获取这样的值 UPDATE tbl1 SET col1 col2 col3 SELECT colA colB colC FROM tbl2 WHERE tbl2 id someid
  • 如何自动将 C++ 文件转换为 Wireshark Lua 解析器

    我有一个定义特定协议的 C 文件 该文件包含定义协议中使用的消息的结构 每个结构体都包含特定消息的字段 示例如下 struct STATS00 MESSAGE T uint8 t message type uint16 t num send
  • 在这个CGBitmapContextCreate中,为什么bytesPerRow为0?

    我在Apple的示例代码中注意到 他们经常在CGBitmapContextCreate的bytesPerRow参数中提供0值 例如 这来自反射 http developer apple com library ios samplecode
  • Android 上不显示 OneSignal-Pushnotification 小图标

    我们有一个 Cordova 应用程序 其中每个 drawable xy 文件夹中都包含一个文件 icon png 我们使用 OneSignal 提供推送通知 通知正在按预期工作 除了那个小图标 我的手机顶部栏上只有一个空白图标 其中显示应用
  • 粗体文本行高高于普通文本行高

    一定是我在这里缺少的一些基本东西 我认为 font weight bold 不应该改变文本占用的垂直空间 特别是当行高设置为高于字体大小时 http jsfiddle net Arkkimaagi 7xAyy http jsfiddle n
  • 使用 phpseclib 库连接到 mysql 数据库

    我已使用 phpscelib 库成功连接到我的 VPS 现在我想连接到我现有的数据库 请帮助我吗 首先 允许该用户远程访问mysql不是更好吗 不过 我不知道你的理由 最常见的
  • R中双变量经验累积分布函数的代码[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 你好 我正在尝试在 R 中获取该函数的代码 但没有办法 R 中有一个名为 mecdf 的包 但现在不可用 有人可以帮我吗 VincentG
  • Angular 2 自定义验证器用于检查何时需要两个字段之一

    我正在尝试实现一个自定义验证器功能来检查是否输入了电话号码 家庭电话和手机 我想在两个字段都被触摸并且没有有效值时在这两个字段上显示错误消息 由于某种原因我的代码无法按预期工作 请帮我完成这件作品 谢谢 这是 stackblitz 链接ht
  • 使用可从 Excel(或非 VFP)读取的 C# 代码创建 .DBF

    语言 C 系统 Windows7 Excel 2007 我想从一些数据创建一个 DBF 并且我想从 Excel 2007 打开它 它可以是 dBase 或 Foxpro 我目前正在FoxPro9中做 顺便说一句 这段代码来自互联网 OleD
  • Haskell 中函数的序列化

    有没有办法在 Haskell 中序列化 读取 显示 函数 例如 考虑到 t 1 1 Num a gt a gt a 我希望能够拥有类似的东西 read 1 Num a gt a gt a 不幸的是这会引发一个错误 Could not ded
  • 我可以在其他类中创建 Activity 的对象吗?

    我定义了一个函数MainActivity现在我想从我的应用程序中的另一个类访问该函数 我创建了一个对象MainActivity我用这个对象调用了该函数 虽然没有错误 但是没有执行 每次我尝试执行时 应用程序都会崩溃 Activity A 应
  • 在 C# 中使用多种表单

    我正在尝试制作一个小项目 该项目针对不同的状态使用多种表单 对话框 并遇到一些问题 我的对话框是登录 设置和显示 当应用程序启动时显示登录表单 Application Run new login 用户可以从中打开 设置 表单 或者如果满足某
  • 高效退出多线程应用程序(具体)

    我已经阅读了一些有关将消息从线程冒泡到所有其他线程以优雅退出的正确方法的资料 每个线程执行其自己的退出例程 其中 我喜欢全局原子布尔值的想法 它可以从任何线程进行标记 并且所有其他线程检查此标记以执行退出例程 当所有线程都加入时 主线程可以