`
zhongwencool
  • 浏览: 28671 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

进程环

阅读更多
编写一个程序,它生成N个进程并相连成环,。一旦启动,这些进程会绕环发送M个消息,然后当收到推出消息的时候正常终止。你可以调用rings:start(N,M,Msg)来启动环。

有两种策略可以完成这个练习,第一种是通过一个中央进程,它设置环并启动发送消息。第二种方法是换里面的新进程产生下一个进程。在编写程序的时候,请确保你的代码在每一个循环迭代中都有很多io:format声明,以检测到底什么发生了,什么没有发生。
    
http://www.sics.se/~joe/ericsson/du98024.html
-module(zog).

%% This is a test program that first creates N processes (that are
%% "connected" in a ring) and then sends M messages in that ring.
%%
%% - September 1998
%% - roland


-export([start/0, start/1, start/2]).

-export([run/2, process/1]).			% Local exports - ouch

start() -> start(16000).

start(N) -> start(N, 1000000).

start(N, M) -> spawn(?MODULE, run, [N, M]).


run(N, M) when N < 1 ->
    io:format("Must be at least 1 process~n", []),
    0.0;
run(N, M) ->
    statistics(wall_clock),

    Pid = setup(N-1, self()),

    {_,T1} = statistics(wall_clock),
    io:format("Setup : ~w s", [T1/1000]),
    case N of
	1 -> io:format(" (0 spawns)~n", []);
	_ -> io:format(" (~w us per spawn) (~w spawns)~n",
		       [1000*T1/(N-1), N-1])
    end,
    statistics(wall_clock),

    Pid ! M,
    K = process(Pid),

    {_,T2} = statistics(wall_clock),
    Time = 1000*T2/(M+K),
    io:format("Run   : ~w s (~w us per msg) (~w msgs)~n",
	      [T2/1000, Time, (M+K)]),

    Time.

setup(0, OldPid) ->
    OldPid;
setup(N, OldPid) ->
    NewPid = spawn(?MODULE, process, [OldPid]),
    setup(N-1, NewPid).


process(Pid) ->
    receive
	M ->
	    Pid ! M-1,
	    if
		M < 0  -> -M;
		true   -> process(Pid)
	    end
    end.

不用使用中央管理来标记各个进程,不用保存,看上去好看很多
  • 大小: 48.9 KB
分享到:
评论

相关推荐

    守护进程程序C++编写保护进程

    标题中的“守护进程程序C++编写保护进程”指的是在C++编程环境中,通过特定的技术手段创建一个守护进程,它的主要任务是确保指定的C#程序(在这里可能是另一个进程)能够持续运行,即使在某些异常情况下(如用户手动...

    连环注入与监视新进程注入源码

    监视新进程注入(Monitoring New Process Injection)则是连环注入的一种变体,主要目标是检测和控制其他进程中的注入行为。 连环注入的核心在于分步骤地执行注入操作,每个步骤都可能涉及不同的注入技术,如DLL...

    fork 两个子进程 及其进程控制

    在操作系统的学习中,进程控制是至关重要的一环,而"fork两个子进程"是实现多进程交互的典型方式。本实验旨在深入理解操作系统如何创建、管理以及通信不同的进程,并且通过对比传统的进程创建方法,探索新颖的实现...

    计算机操作系统期末考试题及答案(三).doc

    18. 死锁条件:死锁的必要条件包括循环等待资源,这意味着存在一个进程环,每个进程都在等待环中的下一个进程释放资源。 19. 文件逻辑组织:数据文件在存储介质上的逻辑组织形式与文件的逻辑结构相关,例如,连续...

    进程监控,根据内存峰值 ,杀死并重启进程 的winform程序

    进程监控是IT系统管理中的重要一环,尤其是在服务器运维中,确保系统稳定运行至关重要。本文将详细介绍基于Windows Forms(Winform)开发的进程监控程序,该程序能够根据进程的内存峰值来判断是否需要关闭和重启特定...

    ring0驱动层上实现 隐藏进程(无进程 无端口 无服务)的简单demo.zip

    在x86架构的CPU中,执行模式分为四个环(Ring0、Ring1、Ring2、Ring3),其中Ring0拥有最高的权限,可以直接访问硬件和系统资源。驱动程序运行在Ring0,可以控制硬件、管理系统资源,因此具有极大的权力。 "隐藏...

    进程高级管理工具

    在计算机科学中,对进程的管理和控制是非常重要的一环,这关系到系统的稳定性和性能。"进程高级管理工具"就是这样一个专门用于帮助用户更有效地管理系统进程的软件。 在Windows操作系统中,我们可以使用任务管理器...

    VC6.0进程管理器

    进程间通信(IPC,Inter-Process Communication)也是进程管理的重要一环。在VC6.0下,我们可以利用管道、共享内存、消息队列、套接字等多种方式实现进程间的通信。这些技术对于构建复杂的多进程应用至关重要。 ...

    操作系统复习资料

    - **循环等待条件**: 存在一个进程环,每个进程都在等待下一个进程占有的资源。 **10. 文件系统** - **定义**: 文件系统是操作系统中负责管理和组织文件的软件组件,提供文件的创建、删除、读写等功能。 - **关键...

    linux进程编程介绍

    对于开发者而言,深入理解Linux进程编程是提升技术水平的重要一环。本文将详细探讨Linux进程编程的基础知识,包括进程的概念、创建与管理进程、进程间通信以及线程的使用。 首先,我们需要了解什么是进程。在操作...

    nodejs 内部资料 进程管理

    IPC(Inter-Process Communication,进程间通信)是进程管理中不可或缺的一环。Node.js中的IPC机制允许主进程和子进程之间传递消息和句柄。句柄传递是指主进程通过send()方法发送句柄给子进程,这里的句柄是一个可选...

    WInCE进程管理

    在WinCE系统中,进程管理是非常关键的一环,它涉及到系统的资源分配、任务调度以及应用程序的执行。本文将深入探讨WinCE进程管理的相关知识点。 一、WinCE进程概念 在WinCE系统中,进程是执行中的程序实例,每个...

    C#获取系统进程信息

    在.NET框架中,C#是一种常用的编程语言,用于开发各种应用程序,...了解如何使用C#操作进程是提升开发者解决问题能力的重要一环。希望这个例子能帮助初学者更好地理解C#中处理系统进程的方法,并在实际项目中灵活应用。

    好看圆环进程时钟html代码

    这种圆形进程时钟的设计理念,通过将时间的流逝以图形化的方式表现出来,既满足了审美需求,又为网页界面增加了动态交互元素。 HTML作为构建互联网基础的编程语言,赋予了开发者无尽的创造空间。随着技术的不断发展...

    windows服务和进程认识

    例如,恶意软件常常伪装成正常服务来逃避检测,因此识别异常服务行为是网络安全的重要一环。同时,优化不必要的进程可以减少资源消耗,提高系统响应速度。 在编程和系统管理工作中,开发人员和管理员经常使用各种...

    VB进程隐藏

    在IT领域,进程隐藏是一种技术,它允许程序在操作系统中隐藏其存在,使其不被常规的进程管理工具检测到。这种技术通常用于恶意软件中,但也可能有合法用途,例如安全软件为了防止自身被恶意关闭。VB(Visual Basic)...

    操作系统 进程管理 PPT 资料

    前趋图是一种有向无环图,用于表示多个进程或程序段之间的执行顺序关系。每个节点代表一个进程或程序段,边表示前趋关系,即节点A到节点B的边意味着A必须在B之前完成。前趋图确保了任务之间的正确执行顺序,避免了...

    操作系统 第二章 进程 课件

    前趋图是一种用来描述程序段或进程执行顺序的工具,它是一个有向无环图(DAG)。每个节点代表一个程序段,有向边表示前趋关系,即一个程序段必须在另一个程序段之前完成。例如,P1→P2表示P1必须先执行完,P2才能...

    操作系统(Linux进程管理

    - **前趋图**:前趋图是一种用来表示程序段或进程之间执行顺序的有向无环图。结点表示程序段,边表示前驱关系,确保无循环。 - **程序的并发执行**:在多道程序设计系统中,多个进程可以交替执行,表现出并发性。...

    服务器进程监控源码

    在IT运维领域,服务器进程监控是不可或缺的一环。本文将深入探讨一款基于MFC/C++编写的服务器进程监控工具,它具备选择监控单个或多个进程、进程崩溃时自动重启以及服务器日志定时清理等功能。通过了解其源码,我们...

Global site tag (gtag.js) - Google Analytics