线程 C++ 的瓶颈

2024-03-04

所以我只是想验证一下我的理解,希望你们能够消除任何误解。所以本质上我有两个线程使用相同的锁并在持有锁时执行计算,但有趣的是,在锁内我将导致线程休眠一小段时间。对于两个线程,每个线程的睡眠时间都会略有不同。由于锁的工作方式,较快的线程是否会因较慢的线程而成为瓶颈,因为它必须等待它完成?

例如:

Thread1() {

   lock();
   usleep(10)
   lock();

}

-

Thread2() {

   lock();
   sleep(100)
   lock();

}

现在,由于 Thread2 持有锁的时间更长,这将导致瓶颈。可以肯定的是,这个系统应该在谁获得锁的问题上来回发生,对吧?

它应该是:

Thread1 gets lock
Thread1 releases lock
Thread2 gets lock
Thread2 releases lock
Thread1 gets lock
Thread1 releases lock
Thread2 gets lock
Thread2 releases lock

等等,对吧? Thread1 应该永远无法在释放锁后立即获取锁,不是吗?


Thread1 应该永远无法在释放锁后立即获取锁,不是吗?

No, 线程1could在释放锁后立即重新获取锁,因为 Thread2 仍然可以暂停(由于调度程序而休眠)

Also sleep只保证线程会休眠at least想要的金额,它可以而且通常会更多。

实际上,您在计算值时不会持有锁,您将获得锁,获得计算所需的值,解锁,计算它,然后再次获得锁,检查计算的旧值是否仍然有效/想要的,然后存储/返回您的计算结果。 为此,std::future并发明了原子数据类型。

...这个系统应该有一个来回发生的事情来决定谁获得锁,对吗?

Mostly大多数情况下,这将是一个来回的过程,但有时线程 1 可能/将会有两个锁定/解锁周期。这取决于您的调度程序,任何执行和周期都可能会有所不同。

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

线程 C++ 的瓶颈 的相关文章

  • 检测您何时进入/退出 Xamarin.iOS 中的主线程

    Xamarin MonoTouch 有没有办法检测主线程中是否正在调用代码 我正在寻找类似于Java的东西EventQueue isEventDispatchThread 我发现 Swing 编程很方便assert时不时 或有时assert
  • 表达式访问者仅为某些 lambda 表达式调用 VisitParameter

    我希望能够使用嵌套扩展方法将 EF 中的实体投影到相应的视图模型 参见我之前的问题使用扩展方法在 EF 中投影单个实体 https stackoverflow com questions 39585427 projection of sin
  • Java 线程 JavaDoc

    我编写了一个只能在特定线程上调用的方法 是否应该将标准注释或注释添加到方法的 javadoc 中来表示这一点 不知道有任何这样的标准注释 Java 并发实践 http www javaconcurrencyinpractice com 在第
  • 错误:“运行所选代码生成器时出错:包恢复失败”

    我正在尝试将控制器添加到 ASP NET Core 项目中的解决方案中 当我尝试这样做时 我收到此错误 我收到相同的消息 为控制器添加最小依赖项和完整依赖项 我也有这个问题 使用实体框架添加控制器 gt 带有操作的 API 控制器 将给出
  • 为什么 fgets 接受 int 而不是 size_t?

    功能如strcpy malloc strlen 和其他各种接受他们的参数或返回值作为size t代替int or an unsigned int出于显而易见的原因 一些文件功能 例如fread and fwrite use size t以及
  • 析构函数与成员函数竞赛

    当我在析构函数内时 其他线程是否可能开始执行对象的成员函数 遇到这种情况该如何处理呢 C 没有内在的保护来防止在删除对象后使用它 忘记竞争条件 另一个线程可以在完全删除你的对象后使用你的对象 Either 确保只有一个位置 代码拥有该对象
  • C++ 并行任务的开销

    我有以下简单的功能 include
  • UI 线程正在阻塞调用 COM 对象的后台线程

    我正在开发一个通过第三方 COM 库与外部设备通信的应用程序 我试图让与设备的所有通信都通过后台线程 以防止通信问题搞砸我的应用程序 并消除在 UI 线程中进行通信所引入的一些其他复杂性 问题是 每当发生导致主 UI 线程阻塞的情况 即调用
  • 如何在Unity Inspector中创建多维数组?

    如何在 Unity Inspector 中创建枚举多维数组并使其可序列化 以便我可以从不同的脚本调用它 public enum colors red blue green yellow cyan white purple public in
  • 如何生成可变参数包?

    给定不相关的输入是否可以生成非类型参数包 我的意思是 我想改变这一点 template
  • _MM_TRANSPOSE4_PS 在 GCC 中导致编译器错误?

    我第一次在 GCC 而不是 MSVC 中编译我的数学库 并经历了所有的小错误 我遇到了一个根本没有意义的错误 Line 284 error lvalue required as left operand of assignment 284号
  • 使用信号和槽更新指针

    我对 Qt 很陌生 请帮我解决这个问题 我正在使用线程在后台执行密集操作 同时我想更新 UI 所以我使用 SIGNALS 和 SLOTS 为了更新 UI 我发出一个信号并更新 UI 让我们考虑下面的示例代码 struct sample QS
  • 如何将输出重定向到 boost 日志?

    我有一个使用boost log的C 程序 我加载了用户提供的动态链接库 我想将 stderr 重定向到 boost 日志 以便用户的库随时执行以下操作 std cerr lt lt Some stuff 它产生相同的结果 BOOST LOG
  • ef core 在更新数据库期间不使用 ASPNETCORE_ENVIRONMENT

    我使用 Visual Studio 通过一定的迁移来更新我的所有环境 使用下面的命令效果很好 update database Migration initMigrationProduct c ProductContext Environme
  • 我的代码哪里有泄漏?

    下面是我的代码 它打开一个 XML 文件 old xml 过滤无效字符并写入另一个 XML 文件 abc xml 最后 我将再次加载 XML abc xml 当执行以下行时 出现异常 表示 xml 文件被另一个进程使用 xDoc Load
  • 如何在 stl 模板中使用导出类 (__declspec(dllexport))?

    我正在使用导出的类 class declspec dllexport myclass private template declspec dllexport class std map
  • NSubstitute - 测试特定的 linq 表达式

    我在当前正在开发的 MVC 3 应用程序中使用存储库模式 我的存储库界面如下所示 public interface IRepository
  • 使用 DataGridViewCheckboxCell 真正禁用 DataGridView 中的复选框

    有谁知道如何使用 DataGridViewCheckboxCell 禁用 DataGridView 中的复选框 我可以将其设置为只读 并设置背景颜色 但我无法让复选框本身显示为禁用状态 有什么想法吗 Guess 你必须自己画 http so
  • Membership.ValidateUser() 的目的是什么

    我一直在学习有关MembershipProvider类 我认为Membership ValidateUser 方法应该用于登录用户 然而我刚刚了解到有一个FormsAuthentication Authenticate 目的是什么Valid
  • 从其对象获取结构体字段的名称和类型

    例如 我有一个类似这样的结构 struct Test int i float f char ch 10 我有一个该结构的对象 例如 Test obj 现在 我想以编程方式获取字段名称和类型obj 是否可以 顺便说一句 这是 C 你正在要求C

随机推荐

  • 如何使用 JAVAFX 图表在图表上绘制多轴

    祝你平安 如何使用JavaFX图表API绘制多轴 以下是一个大型软件中的趋势图 其中绘制了一些实时数据和历史数据 注册了两支笔 每支笔的独立轴都在同一趋势上定义 我一直在尝试在 JavaFX 2 0 图表中做到这一点 我已经能够绘制实时图表
  • 如何在ggplot2中设置geom_smooth的se(置信区间)颜色? [复制]

    这个问题在这里已经有答案了 当我设置该功能时 geom smooth se TURE 置信区间是灰色的 但我想设置一些其他颜色 看起来是geom smooth中不能设置颜色的参数 我应该创建一个新的几何对象吗 或者有一些 ggplot2 扩
  • awk 脚本:如何防止 ARGV 被视为输入文件名

    看来 awk 脚本考虑了ARGV 1 to ARGV ARGC 作为输入文件 有没有办法让 awk 考虑到ARGV作为简单的参数而不是输入文件 Example test awk usr bin awk f BEGIN title ARGV
  • 如何在 MVC ScriptBundle 中将字符集设置为 .js 文件?

    我有 script js 文件 其中包含几个西里尔字母字符串 当我尝试使用像这样的标准链接加载它时 西里尔字母变成矩形 badCharsetCaracters 这解决了这个问题 如何使用 ASP NET MVC 4 Bundles 设置字符
  • 网站通过文档上传会暴露哪些安全漏洞?

    我是文档存储空间的新手 我还不确定我在做什么 但在开始之前我想知道当允许文档上传时可能存在的安全威胁以及清理数据的最佳方法是什么 我正在使用 PHP 并且允许使用图像 word 文档 pdf excel 文档等 这是一个好的解决方案吗 ht
  • Concourse 无法连接到 Docker 存储库

    我是广场新手 并尝试在我的环境中设置它 我在 Windows 机器上的 Virtualbox 6 1 4 r136177 上运行 Ubuntu 18 04 我设法让节点运行并设置大厅工作人员 并且我能够成功访问我的大厅仪表板 当我尝试运行本
  • QueryFailedError:格式错误的数组文字:typeORM 中的“[]”

    我正在尝试使用 TypeORM 在 postgres 中的表中添加新行 但收到 与数组文字相关的问题 问题发生在subscriptions field 实体格式 export class User PrimaryColumn userId
  • Hortonworks HDP Sandbox 上的 HBase:无法从 ZooKeeper 获取主地址

    我从 hortonworks for virtualbox 下载了 HDP 2 1 在简单命令中使用 Hbase shell 时出现以下错误 create t1 NAME gt f1 VERSIONS gt 5 Hortonworks 错误
  • CORS 请求在本地打开的 html 文件中被阻止

    我已经开始编写一个使用 JavaScript 显示数据的 HTML 文件 因为它应该尽可能简单地完成 所以我不想运行nodejs或任何其他本地http服务器 我刚刚在浏览器中打开了 HTML 文件 url 为 file home visu
  • 在rails中使用他的ip自动检测用户的时区

    我想从用户的 IP 地址找到他的时区 如果用户正在旅行 应用程序应该能够找出他所在的当前时区 你不能 至少可靠地 想想代理 ISP NAT 或 VPN 即使用户看起来在某个国家 地区 并不意味着他真的在那里 我建议让用户选择他喜欢的时区 并
  • .NET 中可以使用不可变数组吗?

    是否有可能以某种方式标记System Array作为不可变的 当放在 public get private set 后面时 它们无法添加到其中 因为它需要重新分配和重新分配 但消费者仍然可以设置他们希望的任何下标 public class
  • 跨服务器移动 mysql 文件

    我有一个巨大的 MySQL 数据库 大约 10 GB 我需要将其复制到不同的服务器 slicehost 我不想进行数据库转储并重新导入 b c 我认为这将花费很长时间 是否可以将原始 SQL 文件从一台机器移动到另一台机器 设置相同的 my
  • 当被模态视图控制器覆盖时,iOS 6 视图控制器布局在方向更改后不会更新

    我有一个 iPad 应用程序 非常适合 6 之前的 iOS 版本 我的根视图控制器显示一个列表 当您单击列表中的任何项目时 根视图控制器会呈现一个模式视图控制器来显示该项目的详细信息 问题是 我的根视图控制器在横向和纵向上有不同的布局 当不
  • Py_Initialize 运行需要哪些文件?

    我正在编写一段简单的代码 该代码从 C C 应用程序运行 Python 函数 为了做到这一点 我设置了 PYTHONPATH 并运行初始化 如下所示 Py SetPythonHome Python27 Py InitializeEx 0 然
  • 强制 R 不使用指数表示法(例如 e+10)?

    我可以强制 R 使用常规数字而不是使用e 10 类似符号 我有 1 810032e 09 and 4 在同一向量内并希望看到 1810032000 and 4 我正在为老式程序创建输出 我必须使用编写一个文本文件cat 到目前为止效果很好
  • java: Spring:如何将 bean 从一个 ClassPathXMLApplicationContext 传输到另一个?

    如何从一个豆子转移豆子ClassPathXMLApplicationContext到另一个 我创建一个这样的上下文 ClassPathXMLApplicationContext myOneContext new ClassPathXMLAp
  • 可展开列表视图自动折叠

    我无法在扩展新组时关闭之前扩展的组 我读过类似的问题 但我无法从中提取概念 我尝试使用 crashGroup groupPosition 方法 但它不起作用 您好 请尝试下面的代码 int lastExpandedGroupPosition
  • 关闭亮点

    我想关闭 PHPStorm 对非错误相关事物的烦人的突出显示 我读了他们的文档 其中说要转到首选项 gt 编辑器 gt 检查 我取消了 SQL 的所有选择 但我仍然无缘无故地得到绿色突出显示 我如何禁用此功能 这很让人分心 That s 语
  • 使用反射实例化内部类时出现 InstantiationException。为什么?

    我无法创建 B 对象 但为什么呢 public class AFactory public int currentRange private abstract class A protected final Object range cur
  • 线程 C++ 的瓶颈

    所以我只是想验证一下我的理解 希望你们能够消除任何误解 所以本质上我有两个线程使用相同的锁并在持有锁时执行计算 但有趣的是 在锁内我将导致线程休眠一小段时间 对于两个线程 每个线程的睡眠时间都会略有不同 由于锁的工作方式 较快的线程是否会因