设计一条简单的等待工作队列之软件模型设计与实现(三)

简介: http://blog.csdn.net/morixinguan/article/details/77758206http://blog.csdn.net/morixinguan/article/details/77783311在前面两篇文章中,可能考虑到后面需要设计复杂的工作队列,所以加入了线程机制。

http://blog.csdn.net/morixinguan/article/details/77758206

http://blog.csdn.net/morixinguan/article/details/77783311

在前面两篇文章中,可能考虑到后面需要设计复杂的工作队列,所以加入了线程机制。但由于设计的是一条简单的等待工作队列,却用到了线程,其实没有必要,线程在这个地方反倒是有点浪费资源,干脆可以不使用它,而将实现出队的操作如下,这样也可以实现同样的效果。

//逐个出队 
//出队 
queue_list *De_queue(queue_list *header)
{
	int ret ;
	int count = 0;
	int queue_length = 0;
	queue_list *p = header ;
	queue_list *prev  = NULL ;
	//如果当前节点的下一个节点为空,则返回空 
	if(header->next == NULL){
		free(header);
		header = NULL ;
		printf("header mem:0x%p\n",header);
		return header ;
	}
	prev = p ;
	p = p->next ;
	//执行工作 
	p->work_queue.queue_st(p);
	//延迟放在这里,一个工作执行完,有可能要等待一下,延迟可以放在这里 
	p->work_queue.work_sleep(p);
	//获取队列的长度 
	queue_length = Get_queue_Length(header);
	queue_length = queue_length - 1;
	header->queue_length = queue_length ;
	printf("当前队列的长度:%d  %d\n",queue_length,header->queue_length);
	prev->next = p->next ;
	free(p);
	return prev ;
}
//执行工作 
p->work_queue.queue_st(p);
//延迟放在这里,一个工作执行完,有可能要等待一下,延迟可以放在这里 
p->work_queue.work_sleep(p);

如果该任务没有产生延迟,则在创建任务结构体初始化的时候,将工作者结构体中的sec初始化为0即可,这样,在入队操作的时候,注册工作者结构体:

New->work_queue.sec = workArray->sec ;
New->work_queue.work_sleep = workArray->work_sleep ;

此时将sec注册为0,则work_sleep最终调用的sleep为0,即相当于不产生延迟,也可以判断sec,如果注册的sec为0,则不调用work_sleep()中的:

sleep(header->work_queue.sec);函数进行传参了,直接返回即可,这样就少调用sleep函数一次,提高了程序的效率:

//每一个工作所对应的时间 
void work_sleep(queue_list *header)
{
	if(0 == header->work_queue.sec)
		return ;
	sleep(header->work_queue.sec);
}
如果后面的队列设计得更加复杂,可能考虑到队列会产生阻塞,休眠的结果,则到时候需要设计一个唤醒队列的机制,就需要进程间通信的知识支持了。




目录
相关文章
|
1月前
|
调度
【嵌入式开源库】timeslice的使用,完全解耦的时间片轮询框架构(二)
【嵌入式开源库】timeslice的使用,完全解耦的时间片轮询框架构
|
1月前
|
Linux
【嵌入式开源库】timeslice的使用,完全解耦的时间片轮询框架构(一)
【嵌入式开源库】timeslice的使用,完全解耦的时间片轮询框架构
|
1月前
|
程序员 Linux
【嵌入式开源库】timeslice的使用,完全解耦的时间片轮询框架构(三)
【嵌入式开源库】timeslice的使用,完全解耦的时间片轮询框架构
|
算法 调度
【操作系统篇】第五篇——调度(概念,层次,调度时机,切换与过程,方式,评价指标)
【操作系统篇】第五篇——调度(概念,层次,调度时机,切换与过程,方式,评价指标)
【操作系统篇】第五篇——调度(概念,层次,调度时机,切换与过程,方式,评价指标)
|
JSON uml 数据格式
设计系统
设计系统
115 0
设计系统
|
存储 缓存 安全
并发编程从操作系统底层工作整体认识开始
前言 在多线程、多处理器、分布式环境的编程时代,并发是一个不可回避的问题。既然并发问题摆在面前一个到无法回避的坎,倒不如拥抱它,把它搞清楚,花一定的时间从操作系统底层原理到Java的基础编程再到分布式环境等几个方面深入探索并发问题。先就从原理开始吧。 计算机系统层次结构 早期计算机系统的层次 最早的计算机用机器语言编程,机器语言称为第一代程序设计语言 现代(传统)计算机系统的层次 现代计算机用高级语言编程 第三代程序设计语言(3GL)为过程式 语言,编码时需要描述实现过程,即“ 如何做”。 第四代程序设计语言(4GL) 为非过程 化语言,编码时只需说明“做什么”, 不需要描述具体
183 0
并发编程从操作系统底层工作整体认识开始
|
Linux 编译器 调度
Linux多线程-概念和控制(2)
Linux多线程-概念和控制(2)
Linux多线程-概念和控制(2)
|
大数据 Linux 调度
Linux多线程-概念和控制(1)
Linux多线程-概念和控制(1)
|
Linux 调度
Linux多线程-概念和控制(3)
Linux多线程-概念和控制(3)