[Prj] 进程遍历中的加锁

来源:百度文库 编辑:神马文学网 时间:2024/04/30 15:09:16
 
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");//Makefileobj-m   := process.oKERNELDIR := /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.*]