回头看进程的创建
来源:互联网 发布:python win32api 安装 编辑:程序博客网 时间:2024/04/29 13:05
这个时候回头看进程的创建,在进程池中查找空闲的进程对象时,就属于一个临界段代码,并没有任何的约束,所以这时存在很大的隐患的。现在利用锁机制对其进行改写,有了锁的保护,还可以同时加入pid生成代码。
proc_t * Proc_create(const char * name,void * entry,void * param,void * stack){ static uint32_t pid = 0; int i; proc_t * proc; uint_t * sp; proc = NULL; Lck_lock(&proc_lock); for( i = 1 ; i < PROC_MAX ; i++) { if( PROC_STAT_FREE == proc_pool[i].proc_stat ) { proc = proc_pool + i; proc->proc_stat = -1; break; } } if( NULL == proc ) { printf("no proc space\n"); Lck_free(&proc_lock); return NULL; } create_pid: pid++; if( 0 == pid ) pid++; /* 0是系统进程的PID */ for( i = 1 ; i < PROC_MAX ; i++) /* 检测PID是否存在重复 */ { if( PROC_STAT_FREE == proc_pool[i].proc_stat ) /* 跳过空闲的进程对象 */ continue; if( pid == proc_pool[i].proc_pid ) /* 出现重复的pid,则重新生成一个 */ goto create_pid; /* pid */ } proc->proc_pid = pid; Lck_free(&proc_lock); /* 设置运行环境 */ sp = stack; sp--; *sp-- = 0; /* 进程退出代码 */ *sp-- = (uint_t)param; /* 进程入口参数 */ *sp-- = (uint_t)Proc_exit; /* 进程退出函数入口 */ *sp-- = (uint_t)entry; /* 进程入口 */ *sp-- = 0x200; /* 进程对应的机器状态字 */ *sp-- = 0; /* 以下为寄存器环境 */ *sp-- = 0; *sp-- = 0; *sp-- = 0; *sp-- = 0; *sp-- = 0; *sp-- = 0; *sp = 0; /* 运行环境设置结束 */ strcpy(proc->proc_name,name); proc->proc_stack = sp; proc->proc_entry = entry; proc->proc_cpu_time = CPU_TIME; proc->proc_stat = PROC_STAT_RUN; return proc;}
- 回头看进程的创建
- 回头看我的2008
- 回头看
- 学习的时候应不时的回头看!
- 翻回头看自己走过的路
- 回头看.Net的优点与进步
- 回头看一看我的2016年
- 回头看,你的进步让你欣慰
- 创建进程的例子
- 进程的创建
- 进程的创建
- 进程的创建
- 进程的创建
- Windows进程的创建
- Windows的进程创建
- 进程的创建过程
- 进程的创建
- Windows的进程创建
- 《Python基础教程》学习笔记之[D4]当索引不好用时—字典
- Jetty的配置、部署与API使用——(3)Linux下利用Jetty API运行一个Jetty服务器
- kernel 点滴(添加中)
- 工作中常用插件学习网站
- c语言中float为什么不能直接用==与0比较
- 回头看进程的创建
- Hibernate实现分页的工具类
- 配置Privoxy的访问控制
- How to do system testing?
- bravo:eclipse web开发插件
- WinForm 应用程序的打包和部署_简单版(图文)
- 工作常用英文单词
- 软件设计师考试大纲
- html 调用js脚本的方式。