在给定的时隙内是否有线程执行的最小指令数量?

问题描述:

在任何给定的时间段内是否有保证由线程执行的最小指令数量。 Execution Model的*页面说:“加法操作是许多语言中不可分割的工作单元”在给定的时隙内是否有线程执行的最小指令数量?

我想了解更多关于用于C/C++的POSIX线程的执行模型和最少数量的不可分割指令或语句保证在一个时隙内执行。有人可以给我一个指针,我可以从这里了解更多。谢谢提前

+1

什么问题是你想解决的,你认为你的问题的答案会使你更接近解决方案? C++标准唯一保证的是“** [intro.multithread]/3 **实现应该确保所有未被阻止的线程最终取得进展。” –

+0

不是你的问题的答案,而是:另外可能是一些机器上的某些情况下的一条指令,另外一条机器上可能有一条以上的指令。如果要添加两个相同大小的寄存器并将结果放回到一个相同大小的寄存器中,那么它可能只是一条指令,而在没有指令流水线的机器上,它可能会是一个周期。但是如果你需要读取内存中的值 - 几乎总是需要一个以上的周期。如果寄存器的大小不一样,那么处理器可能必须执行读 - 修改 - 写,这绝对是不可分的。 –

+0

我从来没有考虑过写多线程应用程序,因为它似乎大多不相关,但我想答案是'一个机器指令'。将一个线程设置为在内核上运行并且几乎立即被中断,并被一个在某些I/O中断或线程间信号上已准备就绪的高优先级线程抢占并非不合理。 –

不,每次都没有关于指令数量的保证。无论如何,执行工作的方式比执行一系列指令要复杂得多。

执行指令更多取决于处理器架构而非语言。在许多入门设计课程中教授的“传统”MIPS架构将在每个时钟周期执行一条指令;一个以1MHz运行的处理器将每秒执行一百万次操作。真实世界的处理器使用诸如流水线,分支预测,“超线程”等技术,并且在每个时钟周期内没有设定数量的操作。

除此之外,真实世界的处理器通常会在具有多任务功能的操作系统下运行。这意味着一个线程可以被内核在未知点中断,并且根本不执行任何代码,因为其他线程被给予处理器时间。有“实时”操作系统,旨在为执行处理器上运行的代码需要多长时间提供更多保证。

您已经对*进行了一些研究;上面的一些关键词应该有助于追踪更多关于这个主题的文章,并且从那里你应该能够找到大量的主要来源来了解更多关于这个主题的内容。

+0

在没有最小指令数的情况下,如果两个线程调用pthread_lock()如何保证特定线程在另一个线程之前成功锁定。这个机制如何运作? – Dinesh

+0

有像TSL(测试集锁)那样的“原子”处理器指令。这些指令执行比较并将结果存储在单个指令中,并用于通过操作系统实现锁定。举个例子,两个线程每个都试图获得锁,并且作为该操作的一部分使用TSL指令。 TSL指令成功执行的第一个线程获取该锁;执行该指令的第二个线程将会失败并进入锁的等待状态。 – wmorrell

在POSIX线程中,有两个主要调度策略(FIFO和循环)。 Round Robin是默认的调度程序,因为它更公平。当使用RR调度程序时,每个线程都有一定的时间(AKA量程)运行,所以不能保证执行X个指令 - 除非我们知道每条指令需要多少时间。

你可以找到更多有关的调度算法的并行线程在这里:http://maxim.int.ru/bookshelf/PthreadsProgram/htm/r_37.html

只给在Linux上如何定义的一轮又一轮的量子一个想法:

/* 
* default timeslice is 100 msecs (used only for SCHED_RR tasks). 
* Timeslices get refilled after they expire. 
*/ 
#define RR_TIMESLICE  (100 * HZ/1000) 

#endif /* _LINUX_SCHED_RT_H */