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