void* worker(void*)
{
int clk = clock();
float val = 0;
for(int i = 0; i != 100000000; ++i)
{
val += sin(i);
}
printf("val: %f\n", val);
printf("worker: %d ms\n", clock() - clk);
return 0;
}
int main()
{
pthread_t tid;
pthread_create(&tid, NULL, worker, NULL);
int clk = clock();
float val = 0;
for(int i = 0; i != 100000000; ++i)
{
val += sin(i);
}
printf("val: %f\n", val);
printf("main: %d ms\n", clock() - clk);
pthread_join(tid, 0);
return 0;
}
メイン スレッドとワーカー スレッドは同じ速度で実行されるはずですが、結果は次のようになります。
val: 0.782206
worker: 5017 ms
val: 0.782206
main: 8252 ms
メインスレッドがずっと遅いです。理由はわかりません....
問題が解決しました。これはコンパイラの問題で、Windows で GCC(MinGW) の動作がおかしいのです。Visual Studio 2012 でコードをコンパイルしましたが、速度に違いはありません。