求助linux内核多线程问题

低调华龙 2008-07-22 11:13:06
是不是 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实现多线程可能要使用线程绑定,
请高手们指点一下,这个问题本人非常着急解决,如何描述的不够清楚请留言,我会继续描述。谢谢
...全文
142 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
tobylee999 2008-07-24
  • 打赏
  • 举报
回复
在w函数里面狠狠的加sleep,每个输出后sleep 1秒,如
输出A
sleep 1
输出B
sleep 1

输出1
sleep 1
输出2
sleep 1

另外,编译链接的时候应该加了-MT 及 -lpthread的吧,不过不加也不知道会有什么问题,应该链不过吧?

咳,确认一下,kernel_thread应该是使用函数W启动一个新线程的吧? 没用过
lin_style 2008-07-23
  • 打赏
  • 举报
回复
双核没试过。。(还在用单核 = =!)

线程不会出现你说的那种情况,建议把代码贴详细点大家才好帮你


cavalier_man 2008-07-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 mingjie_520 的回复:]
楼上的大哥
我倒了
麻烦你老人家说说
当然一楼的大哥说的那个方法我试过不管用的
[/Quote]
对不起,我开始看错了,你这么写肯定不行啊,你得把输出A;
输出B;
输出C;
。。。。;
输出N; 写成一个函数,不然肯定是w执行完了才会执行后面的
在 “输出1;”之后挂起他自身啊,然后
再 输出A;之后又唤醒w,如此反复,应该可行实现,有点笨啊这方法
低调华龙 2008-07-23
  • 打赏
  • 举报
回复
楼上的大哥
我倒了
麻烦你老人家说说
当然一楼的大哥说的那个方法我试过不管用的
ForestDB 2008-07-23
  • 打赏
  • 举报
回复
先睡会觉先。
cavalier_man 2008-07-23
  • 打赏
  • 举报
回复
好象linux是分时的吧,你第一个函数估计不用150ms就执行完了把,你在第一个里面加个延时试哈
我菜,错了别笑我

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧