[Prj] 进程遍历中的加锁

来源:百度文库 编辑:神马文学网 时间:2024/04/28 15:03:37
1. 写一个视频服务器: 客户通过多线程来读取数据。  之所以用多线程,是为了增加传输速度。  用多线程发送速度快一些。
不太明白
能不能说详细点
我的程序是这样的
监听的时候,如果有客户连接则创建一个线程并将缓冲区的数据发送给客户端
问题是客户端显示的画面好像不连续而且不同步
---
如果你需要发给多个客户 那可以考虑使用udp多播的方式 单个线程就可以发给多个客户
2.  写一个Linux文件系统, 以ext2 或ext3文件作为磁盘
============================================
发信人: ychu (Gone!), 信区: KernelTech
标  题: [合集]进程遍历中的加锁
发信站: 水木社区 (Mon Oct  1 17:29:14 2007), 站内
☆─────────────────────────────────────☆
mablexidana (专业课) 于  (Tue Sep 18 09:48:57 2007)  提到:
想求个
遍历系统进程的程序~~
万分感谢~
☆─────────────────────────────────────☆
gqlu (恋上此生) 于  (Tue Sep 18 09:52:10 2007)  提到:
可以先找到init进程,然后遍历之。
【 在 mablexidana (专业课) 的大作中提到: 】
: 想求个
: 遍历系统进程的程序~~
: 万分感谢~
: ...................
☆─────────────────────────────────────☆
mablexidana (专业课) 于  (Tue Sep 18 10:00:05 2007)  提到:
没写过内核的程序,呵呵
【 在 gqlu (恋上此生) 的大作中提到: 】
: 可以先找到init进程,然后遍历之。
☆─────────────────────────────────────☆
luohandsome (苹果王子) 于  (Tue Sep 18 10:07:59 2007)  提到:
2.6内核
用for_each_process宏。
不过没有0号进程。
//process.c
#include
#include
#include
#include
#include
#include
#include
#include
static int __init process_init(void)
{
int result=0;
struct task_struct *p;
read_lock_irq(&tasklist_lock);
for_each_process (p) {
printk("pid=%d,name=%s\n",p->tgid,p->comm);
}
read_unlock_irq(&tasklist_lock);
return result;
}
static void __exit process_exit(void)
{
printk("unreg success\n");
}
module_init (process_init);
module_exit (process_exit);
MODULE_LICENSE("GPL");
//Makefile
obj-m   := process.o
KERNELDIR := /lib/modules/$(shell uname -r)/build
PWD       := $(shell pwd)
all:
$(MAKE) -C $(KERNELDIR) M=$(PWD)
clean:
rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions
【 在 mablexidana (专业课) 的大作中提到: 】
: 想求个
: 遍历系统进程的程序~~
: 万分感谢~
: ...................
☆─────────────────────────────────────☆
mablexidana (专业课) 于  (Tue Sep 18 10:17:00 2007)  提到:
非常感谢~
【 在 luohandsome (苹果王子) 的大作中提到: 】
: 2.6内核
: 用for_each_process宏。
: 不过没有0号进程。
: ...................
☆─────────────────────────────────────☆
wheelz (心魔) 于  (Tue Sep 18 10:31:46 2007)  提到:
在for_each_process()前后,好像需要read_lock_irq(&tasklist_lock);
【 在 luohandsome (苹果王子) 的大作中提到: 】
: 2.6内核
: 用for_each_process宏。
: 不过没有0号进程。
: ...................
☆─────────────────────────────────────☆
mablexidana (专业课) 于  (Tue Sep 18 10:47:24 2007)  提到:
read_lock(&tasklist_lock);
是这个,还是read_lock_irq?
【 在 wheelz (心魔) 的大作中提到: 】
: 在for_each_process()前后,好像需要read_lock_irq(&tasklist_lock);
☆─────────────────────────────────────☆
wheelz (心魔) 于  (Tue Sep 18 10:58:24 2007)  提到:
嗯,可能read_lock()就够了,没仔细研究过这个地方。
【 在 mablexidana (专业课) 的大作中提到: 】
: read_lock(&tasklist_lock);
: 是这个,还是read_lock_irq?
☆─────────────────────────────────────☆
luohandsome (苹果王子) 于  (Tue Sep 18 12:22:12 2007)  提到:
read_lock_irq(&tasklist_lock);
read_unlock_irq(&tasklist_lock);
在void normalize_rt_tasks(void)里是这样的
【 在 wheelz (心魔) 的大作中提到: 】
: 嗯,可能read_lock()就够了,没仔细研究过这个地方。
☆─────────────────────────────────────☆
luohandsome (苹果王子) 于  (Tue Sep 18 12:22:27 2007)  提到:
已更正,呵呵
【 在 wheelz (心魔) 的大作中提到: 】
: 在for_each_process()前后,好像需要read_lock_irq(&tasklist_lock);
☆─────────────────────────────────────☆
mablexidana (专业课) 于  (Tue Sep 18 12:37:29 2007)  提到:
我加的是read_lock发现也行
#include
#include
#include
static int __init process_init(void)
{
int result = 0;
struct task_struct *p;
read_lock(&tasklist_lock);//锁
for_each_process(p)
{
printk("pid=%d,name=%s\n",p->tgid,p->comm);
}
read_unlock(&tasklist_lock);
return result;
}
static void __exit process_exit(void)
{
printk("process_exit");
}
module_init(process_init);
module_exit(process_exit);
MODULE_LICENSE("GPL");
【 在 luohandsome (苹果王子) 的大作中提到: 】
: 已更正,呵呵
☆─────────────────────────────────────☆
luohandsome (苹果王子) 于  (Tue Sep 18 12:48:00 2007)  提到:
read_lock是不关中断的。
read_lock_irq关中断。
就这点区别。
【 在 mablexidana (专业课) 的大作中提到: 】
: 我加的是read_lock发现也行
: #include
: #include
: ...................
☆─────────────────────────────────────☆
ychu (Gone!) 于  (Tue Sep 18 13:02:59 2007)  提到:
从消除隐患的情况看,还是使用read_lock_irq.
【 在 luohandsome (苹果王子) 的大作中提到: 】
: 已更正,呵呵
☆─────────────────────────────────────☆
wheelz (心魔) 于  (Tue Sep 18 14:07:03 2007)  提到:
似乎也有很多地方用的是没有_irq后缀的。
【 在 luohandsome (苹果王子) 的大作中提到: 】
: read_lock_irq(&tasklist_lock);
: read_unlock_irq(&tasklist_lock);
: 在void normalize_rt_tasks(void)里是这样的
: ...................
※ 修改:·ychu 于 Oct  1 17:30:32 修改本文·[FROM: 222.35.2.*]