linux多线程测试

[复制链接]
查看11 | 回复2 | 2010-5-24 17:12:04 | 显示全部楼层 |阅读模式
简单写来
main
int g1,g2;
pthread_create(&thrd1,NULL,(void *)task1,(void*)&g1);
ret=pthread_create(&thrd1,NULL,(void *)task2,(void*)&g2);
pthread_join(thrd2,NULL);
pthread_join(thrd1,NULL);
cleanup(g1,g2);

void task1(int *counter)
{while(*counter<5)
{printf("Task1 counter: %d\n",*counter);
(*counter)++;
sleep(1);
}
}
void task2(int* counter)
{while(*counter<5)
{printf("Task2 counter: %d\n",*counter);
(*counter)++;
//sleep(1);此处没有sleep
}
}
void cleanup(int counter1,int counter2)
{printf("total iterations: %d\n",counter1+counter2);}
以上是必要的部分,没有语法错误可以编译。
理论上的结果是:
Task1 counter: 0
Task2 counter: 0
Task2 counter: 1
Task2 counter: 2
Task2 counter: 3
Task1 counter: 1
Task1 counter: 2
Task1 counter: 3
Task1 counter: 4
total iterations: 10
我的ubuntu下gcc编译结果:
Task1 counter: 0
Task2 counter: 0
Task2 counter: 1
Task2 counter: 2
Task2 counter: 3
Task2 counter: 4
total iterations: 6
谁能告诉我为什么task1的后部分的内容为什么不再运行了?sleep一秒怎么没有回去?我的qq563917500。希望结交一下linux多线程编程的朋友,我是作嵌入式的。

回复

使用道具 举报

千问 | 2010-5-24 17:12:04 | 显示全部楼层
如果第二个子线程也睡眠一秒钟,结果接近理论结果,由于主线程运行速度较快,发现第二个子线程运行完后,立即结束运行,所以得到了你的编译结果!
回复

使用道具 举报

千问 | 2010-5-24 17:12:04 | 显示全部楼层
把g1/g2也改成全局变量试试。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行