设为首页
收藏本站
用户名
Email
自动登录
找回密码
密码
登录
注册
快捷导航
平台
Portal
论坛
BBS
文库
项目
群组
Group
我的博客
Space
搜索
搜索
热搜:
shell
linux
mysql
本版
用户
LinuxSir.cn,穿越时空的Linuxsir!
»
论坛
›
编程开发讨论区 —— LinuxSir.cn
›
内核与驱动开发
›
kthread_create创建的内核线程中如何调用down? ...
返回列表
查看:
2835
|
回复:
2
kthread_create创建的内核线程中如何调用down?
[复制链接]
jiyongguang
jiyongguang
当前离线
积分
429
IP卡
狗仔卡
发表于 2008-6-25 23:07:06
|
显示全部楼层
|
阅读模式
如果用kernel_thread创建线程,在其中使用down和up很方便,但是通过kthread_create创建了线程A,然后通过down和up来控制其运行和睡眠状态,但是在模块卸载的时候确发现无法通过kthread_stop终止线程,请问有什么办法解决?还是只能通过schedule?
主要想让A循环处理命令队列Q,但是Q中的某些命令状态并不是都要处理,比如有状态1,2,3,4,5,只有状态1,5需要处理,但是如果让A不停遍历队列Q处理则效率很低,想让A每次遍历完一次队列即睡眠,当有状态改变时才唤醒A,有什么好办法嘛?
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
显身卡
pagx
pagx
当前离线
积分
227
IP卡
狗仔卡
发表于 2008-7-4 16:16:15
|
显示全部楼层
我没有理解你的问题。
但是线程应该可以自然退出的, 你看看xfs的实现就知道了。
module加载的时候会建立几个线程。
有某个全局变量 __quited;
线程检查 __quited 是否为假否则作清理工作, 并退出。
rmmod的时候只需要将 __quited设置为真, 并等待线程的退出, 之后就返回了。
回复
支持
反对
使用道具
举报
显身卡
tksger1987
tksger1987
当前离线
积分
4
IP卡
狗仔卡
发表于 2008-7-13 23:45:05
|
显示全部楼层
你内核线程里的无限循环改为
while (!kthread_should_stop())
{
.........
}
kthread_should_stop()会去判断是不是有某人调用了kthread_stop去终止你的内核线程,如果是就会退出无限循环, 然后内核会通知kthread_stop,表明线程退出了,kthread_stop函数等到线程退出后才会返回.
回复
支持
反对
使用道具
举报
显身卡
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册
本版积分规则
发表回复
回帖后跳转到最后一页
Copyright © 2002-2023
LinuxSir.cn
(http://www.linuxsir.cn/) 版权所有 All Rights Reserved.
Powered by
RedflagLinux!
技术支持:
中科红旗
|
京ICP备19024520号
快速回复
返回顶部
返回列表