linux内核没有线程吗,linux内核多线程问题

是不是 LINUX内核多线程用kernel_thread函数实现?如果是的话小弟有两个问题希望大家帮助!

1、在单CPU单核情况下 下面函数执行

int 要实现的多线程函数W()

{

输出1;

输出2;

。。。。;

输出N;

}

int 主函数()

{

kernel_thread函数调用 上面函数W;

输出A;

输出B;

输出C;

。。。。;

输出N;

}

运行结果是  输出1,输出2,输出3,。。。。输出N,然后输出A,输出B,输出C,。。。 输出N;

这样看来 还是单线程啊 ,也就是没有出现抢占CPU的情况,理论来说应该是  输出数字12345日志的中间应该穿插着ABCD..才对啊,这样才表示2个线程都在执行。

2,问题2

在双CPU每个 CPU单核情况下做上面测试

结果还是和 测试1相同,没有出现交叉打日志情况,而且朋友说 双CPU实现多线程可能要使用线程绑定,

请高手们指点一下,这个问题本人非常着急解决,如何描述的不够清楚请留言,我会继续描述。谢谢

|

1.第一个问题,你并不能确定输出一定是你描述的结果,那只是你的想像,或者是因为你线程执行时间太短,没办法产生切换的情况.

2.多核的情况不了解.

总的感觉,你在用静止的视角去看动态的问题.

|

线程绑定是指让某个线程就固定呆在某个CPU上,不许跑到另外1个CPU上去。

你这个测试用不着绑定,while(true)循环输出就能看出交叉来。

|

int 要实现的多线程函数W()

{

while(true)

{

输出A1;

输出A2;

。。。。;

输出A100000;

}

}

int 主函数()

{

kernel_thread函数调用 上面函数W;

while(true)

{

输出B1;

输出B2;

输出B3;

。。。。;

输出B100000;

}

}

|

。。。、

简单点说,你把两边的N都做成100000遍,再测试一下。就能看到现象了。

|

第一个问题,在多线程执行时,子线程是与进程抢占资源的,有可能会出现1,A,2,B,3...的情况,当然也有可能出现其他情况,这要视情况而定,不知道你的程序问题出在哪里,最好能贴个贴子出来

同样第二个问题不了解,没试过

|

int 要实现的多线程函数W()

{

while(true)

{

输出1;

输出2;

。。。。;

输出N;

}

}

int 主函数()

{

kernel_thread函数调用 上面函数W;

while(true)

{

输出A;

输出B;

输出C;

。。。。;

输出N;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值