forループ内に3つのスレッドを作成する短いプログラムを実行しようとしています。各スレッドは、画面の「内部」に書き込みます。これは、異なるマシン上のXPとVistaの両方で実行されているCygwinで発生しています。これは現在のコードです。
#include <iostream>
#include <unistd.h>
#include <pthread.h>
#include <semaphore.h>
using namespace std;
void* printInside(void* arg);
int main()
{
pthread_t threads[3];
for(int i = 0; i < 3; i++)
{
pthread_create(&threads[i], 0, printInside, 0);
}
return 0;
}
void* printInside(void* arg)
{
cout << "inside";
return 0;
}
そして、それは機能しません。forループの内側にcoutを追加すると、動作が遅くなるように見えます。
for(int i = 0; i < 3; i++)
{
cout << "";
pthread_create(&threads[i], 0, printInside, 0);
}
なぜこれが当てはまるのかについての提案はありますか?
編集:
ループの後に結合を追加するための応答を受け取りました
int main()
{
pthread_t threads[3];
for(int i = 0; i < 3; i++)
{
pthread_create(&threads[i], 0, printInside, 0);
}
for(int i = 0; i < 3; i++)
{
void* result;
pthread_join(threads[i],&result);
}
}
void* printInside(void* arg)
{
cout << "inside";
return 0;
}
しかし、それでも機能しません。結合が間違っていますか?
修繕
「出力は通常、標準ライブラリによってバッファリングされます。特定の状況ではフラッシュされますが、手動で実行する必要がある場合もあります。したがって、スレッドが実行されて出力が生成されても、フラッシュしない限り表示されません。」