利用Unix-ECF实现睡眠排序(SleepSort)和闹钟(Alarm)
2016-11-23 20:58
369 查看
利用ECF并发实现睡眠排序(SleepSort)和闹钟(Alarm)
看到ECF(异常控制流)了,这一章真是打开了新世界的大门,但是理解很困难,为了加深理解我决定写点简单代码。虽然十分简单,但是可以做一些东西玩玩啊。
当然我做的都是小东西调节一下心情的。
1.睡眠排序(SleepSort)
睡眠排序的思想,读入n个数,创建n个子进程,睡眠这n个数的时间(只考虑正整数情况,负数则加一个数变成整数,实数则乘一个足够大的倍数整数再取整),返回,收集n个子进程返回的顺序即可,是不是很有意思。
当然子进程太多或睡太久就不好了,所以加了点限制。
2.闹钟(Alarm)
看到书里有一个函数alarm,觉得这个闹钟才是正确用法。
当然也可以开一个子进程睡一会,醒来以后叫父进程。
看到ECF(异常控制流)了,这一章真是打开了新世界的大门,但是理解很困难,为了加深理解我决定写点简单代码。虽然十分简单,但是可以做一些东西玩玩啊。
当然我做的都是小东西调节一下心情的。
1.睡眠排序(SleepSort)
睡眠排序的思想,读入n个数,创建n个子进程,睡眠这n个数的时间(只考虑正整数情况,负数则加一个数变成整数,实数则乘一个足够大的倍数整数再取整),返回,收集n个子进程返回的顺序即可,是不是很有意思。
当然子进程太多或睡太久就不好了,所以加了点限制。
#include<stdio.h> #include<stdlib.h> #include<signal.h> int main() { int n,i,pid,data[10]; printf("This is a tiny program complementing sleeping sort.\n"); printf("It can handle n (n<=10) positive integers in [1,10].\n"); printf("Please input n >"); scanf("%d",&n); printf("Please input the data >"); for (i=0;i<n;i++) scanf("%d",&data[i]); for (i=0;i<n;i++) { if ((pid=fork())==0) { sleep(data[i]); printf("%d ",data[i]); fflush(stdout); exit(0); } } while ((waitpid(-1,NULL,0)!=-1)); printf("\n"); exit(0); }
2.闹钟(Alarm)
看到书里有一个函数alarm,觉得这个闹钟才是正确用法。
当然也可以开一个子进程睡一会,醒来以后叫父进程。
#include<stdio.h> #include<stdlib.h> #include<signal.h> int seconds; void handler(int sig) { if (seconds) { printf("%5d seconds left...\n",seconds--); alarm(1); } else { printf("\n"); printf(" Done\n"); exit(0); } return; } int main() { signal(SIGALRM,handler); printf("This is a tiny alarm, please set the time (in seconds) >"); scanf("%d",&seconds); printf("%5d seconds left...\n",seconds--); alarm(1); while (1); return 0; }
相关文章推荐
- unix 利用fork 和sleep 实现的排序,主要是练习 apue chapter 10 fork 和 execlp
- 利用"委托"实现对象实例按"多字段嵌套"排序
- 利用比较器接口实现类排序
- 利用jQuery 实现GridView异步排序、分页的代码
- 不用JavaScript实现列表排序(利用钻取实现)
- W. :利用最小优先级队列实现对k个已序队列的合并排序。习题6.5-8
- [原创][利用TDC实现表格的排序,过滤,上下条滚动及表格分页]
- 利用随机化快速排序求带权中位数C++实现
- set利用TreeSet来实现对象的排序
- 利用JQuery方便实现基于Ajax的数据查询、排序和分页功能
- Effective C# 学习笔记(三十一)利用IComparable<T>和IComparer<T>接口来实现排序关系
- 利用Dataview实现搜索指定目录下的所有文件,以指定的条件排序(可以按文件名升降序,最后修改时间升降序)
- 利用二叉搜索树来实现排序 BSTree(pku 1002)
- 利用JQuery方便实现基于Ajax的数据查询、排序和分页功能
- 日文,中文,韩文,利用Arrays.sort()对非英文排序,并与原值比较,返回(-1,0,1), 实现 Comparator接口, list 排序
- 利用"委托"实现类的对象实例按"多字段嵌套"排序
- 利用JQuery方便实现基于Ajax的数据查询、排序和分页功能
- 利用case或者decode实现自定义顺序排序
- 通用排序函数的功能实现(利用接口和委托实现泛型[通用]排序)
- mapreduce 利用InverseMapper.class对key,value进行 交换实现词频排序