多线程程序,代码输出不正确,
- C/C++ code
#include <stdio.h>#include <pthread.h>#include <stdlib.h>#include <unistd.h>void *thread_function(void *arg);int main(void){ pthread_t p[5]; int i; for(i=0;i<5;i++){ pthread_create(&p[i],NULL,thread_function,&i); sleep(1); } for(i=0;i<5;i++) pthread_join(p[i],NULL); return 0;}void *thread_function(void *arg){ printf("%d\n",*(int*)arg); pthread_exit(0);}直接运行上面的代码.结果是正确的输出01234.但是如果是把第一个for里面的sleep去掉的话.那么输出的结果就不定了.而且会出现重复.这到底是怎么回事呢?
[解决办法]
并发性
回复内容太短了!
[解决办法]
线程被创建以后,被调度的时候不一定,先创建的不一定先被调度
sleep(1)之所以正确,是1s足够长,上一次被创建的线程在下一个线程创建之时肯定被调度到了
[解决办法]
系统默认采取基于时间片轮转的调度策略
更多参考:
http://blog.csdn.net/harry_lyc/article/details/6055734
[解决办法]
[解决办法]
pthread_create(&p[i],NULL,thread_function,&i);
你把main函数栈上的一个int i的地址告诉了所有线程, 当然就是访问同一个int啊, C语言基础功啊。
[解决办法]
其实加了sleep也不是百分百保证上一个线程已经运行的...
多线程要时刻考虑并发问题。
[解决办法]
再多说一句,加了sleep输出结果也不一定每次都一样.
[解决办法]