C语言 多线程 并发执行 不随机

C语言多线程并发执行不随机问一下为什么输出不是0-20随机输出,都是顺序的?为什么有的会出现多次?(加睡(1);便会变成1-20顺序出现一次)pthread_join是等... C语言 多线程 并发执行 不随机问一下

为什么输出不是0-20随机输出,都是顺序的?
为什么有的会出现多次?(加睡(1);便会变成1-20顺序出现一次)
pthread_join是等待它们并发执行意思吗?
展开
 我来答
ennano
2017-04-28 · TA获得超过1744个赞
知道小有建树答主
回答量:813
采纳率:100%
帮助的人:293万
展开全部
1:pthread_join和并发不并发没关系,是指等待子线程结束之后才返回。你的代码有一个问题,就是只等待了最后一个线程结束,你的pthread_join的第一个参数,就是最后一个线程的id。不过这个和并发顺序没关系
2:你的CPU是不是只有1个核?多线程只有运行在多核CPU才能真正将线程分配给不同CPU,并发执行(也就是随机执行)。不过我想现在单核CPU不多,除非你是虚拟机只分配了一个核。另外就算单核,如果你线程执行的任务耗时比较长,系统还是会将任务切片交替执行。所以你的问题主要是下面:
3:你的子线程执行的内容只有一个打印,执行的速度几乎等于创建速度,也就是刚创建线程,线程就执行完了,导致根本来不及随机分配,你可以在子线程里多做一些事情,比如每个子线程连续打印1000行,你再看下就会发现多线程确实是随机执行的。
追问
那麼如果实现并发?就是等待全部create 再全部一次执行
追答
可以这么做,用一个共享变量做开关
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式