社区
Linux_Kernel
帖子详情
如何在kthread_create创建的线程函数里面退出该线程呢????
汗晕倒
2010-11-17 02:03:14
如果用kthread_stop的话要知道kthread_create创建线程时返回的指针,线程函数本身怎么去获得这个指针呢??
其他用什么方法可以使得线程自动退出呢??
内核线程自身不会自动退出,那么线程函数返回的值是传给谁啊?那不是没有必要返回了?
...全文
513
12
打赏
收藏
如何在kthread_create创建的线程函数里面退出该线程呢????
如果用kthread_stop的话要知道kthread_create创建线程时返回的指针,线程函数本身怎么去获得这个指针呢?? 其他用什么方法可以使得线程自动退出呢?? 内核线程自身不会自动退出,那么线程函数返回的值是传给谁啊?那不是没有必要返回了?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
汗晕倒
2010-11-26
打赏
举报
回复
谢谢各位,我现在发现一种方法是用kill_proc来实现的,通过发送接收信号量来实现。
不过我现在还是用kthread_should_stop来实现。用10L的方法。
知和行
2010-11-23
打赏
举报
回复
你看hub.c里是怎么干的
static int hub_thread(void *__unused)
{
do {
hub_events();
wait_event_interruptible(khubd_wait,
!list_empty(&hub_event_list) ||
kthread_should_stop());
try_to_freeze();
} while (!kthread_should_stop() || !list_empty(&hub_event_list));
pr_debug("%s: khubd exiting\n", usbcore_name);
return 0;
}
手机写程序
2010-11-19
打赏
举报
回复
while(!(kthread_should_stop())
{
if(error)
contine;
...
}
这样的话线程不干活了,只等kthread_stop信号了,就不会出问题了.
手机写程序
2010-11-19
打赏
举报
回复
实在不行就设全局标志位吧,不过这样会很难看.
汗晕倒
2010-11-19
打赏
举报
回复
[Quote=引用 7 楼 eyey1 的回复:]
while(!(kthread_should_stop())
{
if(error)
break;
...
}
这样有什么问题?你是想把driver自动卸载吗?
[/Quote]
我的意思是可能在while之前已经出错,while后面的内容已经没有意义了,这样我想退出线程函数,关闭线程。这样的话,到卸载程序的时候,因为有个kthread_stop的函数,这个函数没有得到kthread_should_stop函数的返回,它自己也不会返回,一直阻塞。我现在就是这样子,搞得卸载驱动的时候出错,卸载不了。。
可能我的设计不合理,请给点意见。
手机写程序
2010-11-19
打赏
举报
回复
while(!(kthread_should_stop())
{
if(error)
break;
...
}
这样有什么问题?你是想把driver自动卸载吗?
汗晕倒
2010-11-19
打赏
举报
回复
[Quote=引用 4 楼 unixstudier 的回复:]
自己不会man?不会google?
http://www.digipedia.pl/man/doc/view/kthread_create.9/
多简单的问题阿!我看你没必要作内核的编程了!
[/Quote]
见过装B,没有见过那么装B的,你说简单,那你回答我的问题啊。
你发个链接就是说kthread_create的用法,跟我的问题根本不搭边,man这个真不会,我就只会在我的系统man,这个是实话。至于google,google出来的东西也是别人问的问题,然后有人解答之后才是google的结果。我问问题都是经过思考和google一番之后才问的。
我问个问题你就说我没有必要做内核编程,我想大哥不是天才就是2哥,天生就会编程,编程过程中没问过问题??或者仅仅在这里装,你要装至少你显示出来你多能耐好不好???
抱歉,有些激动!!!
汗晕倒
2010-11-19
打赏
举报
回复
[Quote=引用 3 楼 eyey1 的回复:]
可以在卸载驱动时用kthread_stop( ... )停止thread.
在thread里检测这个信号.
while(!(kthread_should_stop())
{
...
}
[/Quote]
这个我知道,我也在用,但是我说的是出现预知错误的情况下要线程自动退出,3楼我说了现在我使用的方法就是用do_exit()。
汗晕倒
2010-11-18
打赏
举报
回复
内核线程是不会退出的,不去退出它,它会永远跑下去。。
现在知道可以用do_exit()来退出线程~
UnixStudier
2010-11-18
打赏
举报
回复
自己不会man?不会google?
http://www.digipedia.pl/man/doc/view/kthread_create.9/
多简单的问题阿!我看你没必要作内核的编程了!
asmlearn
2010-11-18
打赏
举报
回复
没用过kthread,线程一般在进程退出后就自己退出啦。
是呀,线程没必要返回值呀,一般只有创建时知道是否成功就好了。
手机写程序
2010-11-18
打赏
举报
回复
可以在卸载驱动时用kthread_stop( ... )停止thread.
在thread里检测这个信号.
while(!(kthread_should_stop())
{
...
}
基于内核
线程
的
创建
、使用和
退出
以及延时宏的补充说明介绍
kernel
thread
可以用kernel_
thread
创建
,但是在执行
函数
里面
必须用daemonize释放资源并挂到init下,还需要用completion等待这一过程的完成。为了简化操作,定义了k
thread
_
create
。
线程
创建
后,不会马上运行,而是...
k
thread
_
create
创建
线程
1 使用k
thread
_
create
创建
线程
: struct task_struct *k
thread
_
create
(int (*
thread
fn)(void *data), void *data,
创建
线程
k
thread
_
create
k
thread
_
create
():
创建
线程
。 struct task_struct *k
thread
_
create
(int (*
thread
fn)(void *data),void *data,const char *namefmt, ...);//注意,第二个参数data用于向
线程
传递参数 #define k
thread
_run(
thread
fn,...
Linux
创建
内核
线程
k
thread
_
create
的用法介绍
可以用内核
线程
来进行一些循环的动作,比如通过循环拉高拉低gpio设置成方波输出的信号,比如循环控制led的闪灯效果等等都可以使用到内核
线程
k
thread
_
create
接口
函数
。 内核
线程
的相关代码目录: include/linux/...
linux k
thread
_
create
效率,ArrrKing的Linux国家地理之三——k
thread
_
create
引发的“血案”...
看MMCDriver时看到了k
thread
_
create
()这个
函数
。感觉这家伙不是一般
函数
,有点来头,google之,果然大有搞头。把搜索到的文章copy如下:[第一篇]说说内核
线程
(k
thread
_
create
和kernel_
thread
的区别就在于前者多加了...
Linux_Kernel
4,436
社区成员
17,460
社区内容
发帖
与我相关
我的任务
Linux_Kernel
Linux/Unix社区 内核源代码研究区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章