C++晋升之多线程二(多线程的一些特点)

知识点一:

             

解析这两幅图片我起了两个线程,第一个线程参数是0,第二个线程参数是1,参数代表几号卖出

图一:先调的第一个线程,但是打印的结果是1先卖出不是0

图二:先调的第一个线程,但是打印的结果是0先卖出不是1

为什么会这样呢,结合知识点二,线程回调函数的参数这些在堆上,创建自己的栈的时间不固定,有可能第一个线程创建好自己的栈,第二个线程才创建好自己的栈,有可能第一个线程创建好自己的栈,并且把10张票卖完了,第二个线程的栈才建好

结论:多线程运行的随机性,不确定性,不可预测性


知识点二:

问:

还是上面两幅图,我调用第一个函数,参数0,回调函数fun,然后我又调用第二个函数,参数1,回调函数fun,那我应该在运行完第一次0的回调函数后都是参数为1的回调函数,为什么两幅图显示运行到后面都还有参数0,为什么没有被改

解:

如果线程函数调用和线程回调函数的参数(不是创建线程的函数的参数)都像普通函数一样按顺序的压着,那运行就不该出现上面的情况

线程的回调函数和回调函数的参数是在堆上,如图

线程的回调函数运行是在操作系统开辟的栈上(看到线程,找了块大小足够的地方开辟的空间)

知识点三:

运行的线程在或者即将运行的线程在忙线程队列

遇sleep必切入闲线程队列

sleep休眠的时间过后放入忙线程队列尾部



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值