gpt4 book ai didi

c++ - "Fusing"2 互斥线程合并为 1 以在单核上执行

转载 作者:行者123 更新时间:2023-11-28 08:00:01 25 4
gpt4 key购买 nike

这个是个奇怪的问题,所以我会尽量提供详细的解释。
假设您在单核机器上运行。你有 2 个线程,可以说经典的生产者消费者问题与互斥量。现在我想知道什么时候在单核机器上运行(所以 1 核没有 HT):
C++ 中有没有一种方法可以将这两个线程的执行融合为一个,以便可以将互斥锁实现为简单的 int 存储/加载操作,而不是互斥锁。例如,这是否有效:统一线程中的生产者代码可以只是将内容放入循环缓冲区,如果当前 buffer_idx 高于 processed_idx,消费者代码将只从缓冲区中读取。

我知道这似乎是一个愚蠢的问题,但很多嵌入式的东西仍然是 1 个核心。为简单起见,假设两个线程的形式都是

while(! shutdown)
{
//...
}

将两个 while 主体放在一个 big while 中会按预期工作吗?

最佳答案

您可以将生产者和消费者放在一个线程中。但是为了什么?它们的存储/加载操作将按顺序执行。他们之间总会有“和平”(不包括意外情况)。对于每个生产者存储操作,都会有消费者加载操作(如果没有条件语句,如果是,生产者将停止并等待消费者代码加载所有东西,然后循环再次开始)。 IMO,使用这样的模型你只能在你的代码中描述一小部分现实世界的情况。

编辑:即使您在单核机器上,将您的逻辑拆分为多个线程也会比将所有内容都放在一个线程中获得更好的性能。例如,虽然生产者会创建一些东西,但即使存储了一些东西,您的消费者也不会做任何事情,这是浪费时间。想象一下,consumer加载东西之后,他要给你逻辑的另一个元素赋值,如果有很多其他元素,站在consumer之后,它们都只等待一个逻辑元素——producer,然后等待消费者等。处理器在大多数情况下在线程之间切换所花费的时间少于生产或消费东西所需的时间。

关于c++ - "Fusing"2 互斥线程合并为 1 以在单核上执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11734866/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com