Рассмотрим:
#include <time.h>
#include <unistd.h>
#include <iostream>
using namespace std;
const int times = 1000;
const int N = 100000;
void run() {
for (int j = 0; j < N; j++) {
}
}
int main() {
clock_t main_start = clock();
for (int i = 0; i < times; i++) {
clock_t start = clock();
run();
cout << "cost: " << (clock() - start) / 1000.0 << " ms." << endl;
//usleep(1000);
}
cout << "total cost: " << (clock() - main_start) / 1000.0 << " ms." << endl;
}
Вот пример кода. В первых 26 итерациях цикла синхронизации функция run стоит около 0,4 мкс, но тогда стоимость сокращается до 0,2 мкс.
Когда usleep раскоментирован, цикл задержки принимает 0,4 мск для всех прогонов, никогда не ускоряясь. Почему?
Код скомпилирован с помощью g++ -O0 (без оптимизации), поэтому цикл задержки не оптимизирован. Он работает на Intel (R) Core (TM) i3-3220 CPU @3,30 GHz, с 3.13.0-32-generic Ubuntu 14.04.1 LTS (Trusty Tahr).