这个多线程程序为什么运行几次结果都不一样,不能总是出现我要的情况吗...
1个回答
展开全部
1、程序运行时,cpu给每上线程分配的时间片断不一样,不同线程优先级别分配的时间片断也不一样,一个线程会在分配到的时间片断内执行一些代码,时间一到,就轮到其他线程执行了,这样cup轮循每个线程。
2、因为你没有加同步互斥机制,所以如果没有足够的sleep的话,线程函数和main函数里的printf(%d\n,pid);之间的顺序是未知的,视你的系统环境而定。
3、线程你只要不告诉它等待,它是不会等其他线程先结束的。什么是线程,线程天生就是并行运行分支,哪怕你给它最低的优先级,那它也只是在同一时刻相比其他线程被执行的几率较低,而完全没有道理停下来等待。
4、因此这两个线程的输出结果是不可预知的。你所希望的轮流的输出,只是其中的一种可能结果,而并不是程序每一次运行的固定输出。建议你多运行几次程序看输出结果,应该是每一次的输出都是不一样的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询