我正在尝试运行一个短程序,该程序在 for 循环中创建三个线程,每个线程都将“内部”写入屏幕。Cygwin 在不同机器上同时运行 XP 和 Vista 时会发生这种情况。这是当前的代码。
#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;
}
但是还是不行,是join做错了吗?
固定的
“输出通常由标准库缓冲。它在某些情况下会被刷新,但有时你必须手动完成。所以即使线程运行并产生输出,除非你刷新它,否则你不会看到它。”