【发布时间】:2014-01-03 07:37:58
【问题描述】:
我正在尝试使用线程在 100m 的赛道上与 6 只蜗牛比赛。这是整个代码http://ideone.com/An30s4。为什么有些蜗牛根本不跑?为什么 他们没有完成100m的轨道? (我其实是希望他们都到达终点线。然后我会在程序结束时打印获胜者。)
struct snail_thread{
int move;
char snail_name[10];
char owner[10];
};
int sum = 0;
void printval(void *ptr) {
struct snail_thread *data;
data = (struct snail_thread *) ptr;
while(sum < 100) {
sum += data->move;
printf("%s moves %d mm, total: %d\n",data->snail_name, data->move, sum);
}
pthread_exit(0);
}
int main(void) {
pthread_t t[6];
struct snail_thread s[6];
int i;
srand(time(NULL));
for(i = 0; i < 6; i++)
s[i].move = rand() % ((5 + 1) - 1) + 1;
strcpy(s[0].snail_name, "Snail A");
strcpy(s[0].owner, "Jon");
strcpy(s[1].snail_name, "Snail B");
strcpy(s[1].owner, "Ben");
strcpy(s[2].snail_name, "Snail C");
strcpy(s[2].owner, "Mark");
strcpy(s[3].snail_name, "Snail D");
strcpy(s[3].owner, "Jon");
strcpy(s[4].snail_name, "Snail E");
strcpy(s[4].owner, "Mark");
strcpy(s[5].snail_name, "Snail F");
strcpy(s[5].owner, "Ben");
for(i = 0; i < 6; i++)
pthread_create(&t[i],NULL,(void *) &printval, (void *) &s[i]);
for(i = 0; i < 6; i++)
pthread_join(t[i], NULL);
return (0);
}
【问题讨论】:
标签: c multithreading posix