考虑到提示from here,我试图通过实验确定Linux 4.4.0-98通用操作系统上的(平均)时间片。以下是我使用C ++ 14 STL的代码。
#include <chrono>
#include <iostream>
#include <unistd.h>
int main(int argc, char** argv) {
std::chrono::time_point<std::chrono::high_resolution_clock> clock_t1 = std::chrono::high_resolution_clock::now();
std::chrono::time_point<std::chrono::high_resolution_clock> clock_t2 = std::chrono::high_resolution_clock::now();
std::chrono::duration<long long, std::nano> diff = clock_t2 - clock_t1;
std::chrono::duration<long long, std::nano> diff_precision = std::chrono::nanoseconds(1LL);
for(int i=0; i<5; i++) {
if(0 == fork()) {
break;
}
}
int num_tries = 0;
while(num_tries < 10) {
while((diff = clock_t2 - clock_t1) <= diff_precision) {
clock_t1 = clock_t2;
clock_t2 = std::chrono::high_resolution_clock::now();
}
std::cout << diff.count() << std::endl;
clock_t1 = std::chrono::high_resolution_clock::now();
clock_t2 = std::chrono::high_resolution_clock::now();
num_tries++;
}
return 0;
}
问题是我总是为所有进程获得相同的数字。例如输出:
480
480
480
480
480
480
此外,时间片约半微秒似乎很奇怪。所以我尝试了从{1}到1毫秒的diff_precision
不同的值。对于不同的精度,它给出了该范围内的输出;例如:对于1ms的精度,它会输出一堆5531380
。确实很奇怪。
这是否是找出操作系统时间片的可靠方法?或者我应该相信source code?
中的值 P.S:“有一个问题已经存在;请更具体一点。“哦,C&#39; mon SO。