#include <stdio.h>
#include <pthread.h>
volatile int start[4];
volatile int done[4];
void *work(void *param)
{
int id = (int)param;
while(start[id] == 0) {}
printf("Thread %i started\n", id);
double total = 0;
for(int i = 0; i < 100000000; i++) { total += i; }
printf("Thread %i done\n", id);
done[id] = 1;
}
int main()
{
pthread_t thread[4];
for(int i = 0; i < 4; i++)
{
pthread_create(&thread[i], 0, work, (void*)i);
done[i] = 0;
}
for(int i = 0; i < 4; i++)
{
start[i] = 1;
}
for(int i = 0; i < 4; i++)
{
while(done[i] == 0) {}
}
for(int i = 0; i < 4; i++)
{
pthread_join(thread[i], 0);
}
}
有优化及无优化的输出: