Chinaunix首页 | 论坛 | 博客
  • 博客访问: 939075
  • 博文数量: 173
  • 博客积分: 3436
  • 博客等级: 中校
  • 技术积分: 1886
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-07 09:29
文章分类

全部博文(173)

文章存档

2016年(6)

2015年(10)

2014年(14)

2013年(8)

2012年(36)

2011年(63)

2010年(19)

2009年(17)

分类: BSD

2012-02-14 11:00:25

bsd6.1自大变革以来,已经放入了多种构建多线程的方式。目前的多线程方式,不仅仅局限于通常意义上的线程,内核的一些中断也采用线程来处理。
 
比较常见的构建方式有3种
 
1. 传统的callout,这个在4.x上就存在了,只不过在新版本中支持的更好,也更能发挥其作用。
   callout属于定时程序,在预定的时间到来时,就运行相应的函数,不过要想再次运行,需要重新定时。
   callout_init,用于初始化callout结构,callout_reset用于定时程序。相对4.x,还增加了callout_init_mtx,用于加锁的callout
 
2. kthread,可以理解为通常意义上的线程,kthread_create后,线程就开始运行了。为了更有效使用cpu,可以在线程无事可做的时候,挂起,如果有数据需要处理,再恢复。
kthread_create((void (*)(void *)) foo, arg, &foo_proc, 0, 0, "foo");
编程是非常简单的
 
3. ithread,这属于中断线程,软中断都是使用ithread的,包括协议栈的软中断处理。在netisr中,调用swi_add函数,挂接中断处理。通过向量表,完成中断处理。
 
在线程中也可以用tsleep和wakeup,控制切换资源的使用。
 

阅读(972) | 评论(0) | 转发(0) |
0

上一篇:WYSE product statistic

下一篇:BSD compile

给主人留下些什么吧!~~