【发布时间】:2017-08-11 05:20:55
【问题描述】:
在任何给定的时间段内,是否有保证由线程执行的最少指令数。 Execution Model 的维基百科页面说“加法运算是许多语言中不可分割的工作单元”
我想了解更多关于使用 C/C++ 的 POSIX 线程的执行模型以及保证在单个时隙中执行的不可分割指令或语句的最小数量。有人可以指点一下我可以从哪里了解更多信息。谢谢提前
【问题讨论】:
-
您想解决什么问题,您认为对您的问题的回答会让您更接近解决方案? C++ 标准唯一保证的是“[intro.multithread]/3 实现应确保所有未阻塞的线程最终都能取得进展。”
-
不是您问题的答案,而是:在某些机器上的某些情况下,加法可能是一条指令,而在其他机器上则不止一条。如果您要添加两个相同大小的寄存器并将结果放回相同大小的寄存器中,那么它可能是一条指令,而在没有指令流水线的机器上,它可能是一个周期。但是,如果您需要从内存中读取值怎么办——这几乎总是需要一个以上的周期。如果寄存器的大小不同,处理器可能必须执行读取-修改-写入,这绝对不是不可分割的。
-
我在编写多线程应用程序时从未考虑过这一点,因为它似乎几乎无关紧要,但我想答案是“一条机器指令”。将线程设置为在内核上运行然后几乎立即被已准备好在某些 I/O 中断或线程间信号发送上的更高优先级线程中断和抢占并不是不合理的。
标签: c++ c multithreading execution execution-time