`

[练习]erlang实现生产者与消费者

 
阅读更多

原来写过一个....我都忘记了..

http://fair-jm.iteye.com/blog/1894288

以上这个不对啊..看了下和所谓的生产者消费者差的远了..什么玩意儿(╯‵□′)╯︵┴─┴

 

..

%% @author cc fairjm
%% @doc @todo Add description to Producer_Consumer.


-module(producer_consumer).

%% ====================================================================
%% API functions
%% ====================================================================
-export([start/0,consume/0, produce/0,rec/1]).
-define(SERVER,?MODULE).
-define(NUM,100).
%% ====================================================================
%% Internal functions
%% ====================================================================
start() ->
 Pid=spawn(?MODULE,rec,[0]),
 case whereis(?MODULE) of
	 undefined -> register(?SERVER,Pid);
	 _Other -> unregister(?SERVER),register(?SERVER,Pid)
 end,
 Pid
.

rec(0) ->
	receive
       {put,Pid} -> Pid ! {put_success,1},rec(1)
	end
;

rec(?NUM) ->
	receive 
	  {get,Pid} -> Pid ! {get_success,?NUM-1},rec(?NUM-1)
	end
;

rec(N) ->
	receive 
		{get,Pid} -> Pid ! {get_success,N-1},rec(N-1);
		{put,Pid} -> Pid ! {put_success,N+1},rec(N+1)
    end
.
%%同步消费
consume()->
		SPid=self(),
		?SERVER ! {get,SPid},
		receive 
			{get_success,Num} -> io:format("get successed count:~p~n", [Num]);
				        _Other ->	io:format("get failed~n")
        end,
	ok
.

%%同步生产
produce()->
		SPid=self(),
		?SERVER ! {put,SPid},
		receive
			{put_success,Num} -> io:format("put successed count:~p~n", [Num]);
			            _Other ->	io:format("put failed~n")
        end,
	ok
.

 以上这个...还有点像样..

 

使用同步的生产和消费 小于等于0时 消费者堵塞  大于等于100时 生产者堵塞

 

erlang中的receive机制挺好的 如果你发送的消息不符合当前在堵塞的receive 就不会被取出 依旧在"信箱"里 等到有匹配的receive堵塞之后再重新被拿出

 

运行:



 

  • 大小: 78.5 KB
分享到:
评论

相关推荐

    erlang 入门练习

    本文将通过"erlang 入门练习"的案例,探讨Erlang的基础知识和应用。 首先,让我们从`client.erl`这个文件名入手。在Erlang中,`.erl`文件是源代码文件,包含了Erlang的模块定义和函数实现。`client`可能表示一个...

    一种傻纸牌游戏的Erlang实现

    标题 "一种傻纸牌游戏的Erlang实现" 暗示了我们将探讨一个使用Erlang编程语言构建的简单纸牌游戏。Erlang是一种并发性极强、功能丰富的函数式编程语言,常用于构建分布式系统和高可用性的应用程序。 在描述中提到的...

    Erlang emulator 实现分析

    Erlang emulator 实现分析Erlang emulator 实现分析

    erlang websocket 练习

    结合给定的标题“erlang websocket 练习”和描述,我们可以推断这是一个关于使用Erlang实现WebSocket服务的实践项目。 首先,让我们详细了解一下Erlang中的WebSocket实现。在Erlang中,通常会使用 Cowboy 或 YAWS ...

    Erlang官网下载过慢

    标签中提到了“Erlang Rabbit 异步通讯”,这意味着讨论的重点是Erlang如何与RabbitMQ结合实现异步通信。RabbitMQ是一个开源的消息代理,它遵循Advanced Message Queuing Protocol (AMQP)标准,提供了一种可靠、高效...

    erlang入门级练习:LeetCode OJ问题的部分erlang 源码

    我自己在新学erlang,在LeetCode OJ上找了题目练习,题目很适合新手熟悉语言,但是LeetCode OJ里面只有几门主流语言的答案,下面是已完成的erlang源代码,后续有空再做其他问题续传,题目包含:(源码开头都有题目...

    erlang编程 Introducing Erlang

    "Introducing Erlang"是Simon St. Laurent撰写的一本入门级教程,旨在帮助初学者理解和掌握Erlang的核心概念和特性。 ### 1. 函数式编程基础 Erlang基于函数式编程范式,这意味着程序由纯函数构成,没有副作用。...

    erlang的timer和实现机制

    此外,提供的"erlang的timer和实现机制.pdf"和"更多erlang资料下载.txt"也是进一步学习和研究的好资源。 总之,Erlang的timer模块是其强大并发能力的一个体现,通过熟练掌握这一部分,开发者可以构建出更加高效和...

    erlang简单聊天练习

    "erlang简单聊天练习"是一个使用Erlang语言实现的轻量级聊天应用示例,它展示了Erlang在并发通信、分布式系统和容错性方面的优势。通过学习和实践这个项目,开发者可以更好地理解和掌握Erlang的基础知识,以及如何...

    erlang ranch实现的游戏tcp服务器

    通过分析和学习这些代码,我们可以深入理解如何将Ranch与Erlang结合,构建一个高效的游戏TCP服务器。开发者可以在此基础上进一步扩展功能,例如加入SSL加密、实现更复杂的游戏逻辑或者优化性能。

    Erlang入门:构建application练习2

    4. **Supervisor**:在Erlang OTP(开放电信平台)中,Supervisors是行为模式之一,用于实现容错和重启策略。`bank1_sup`模块应包含一个`supervisor`行为的实现,负责启动和监控子进程。 5. **模块和功能**:在`src...

    erlang实现的网游服务器(OpenPoker系统)

    erlang实现的网游服务器(OpenPoker系统)erlang实现的网游服务器(OpenPoker系统)erlang实现的网游服务器(OpenPoker系统)

    KMP(Erlang)代码实现

    在给定的文件内容中,通过Erlang语言实现了KMP算法,以下是从文件内容中提取的关键知识点: 1. kmp_search/2函数:这是KMP算法的主函数,用于检查子串(SubString)是否存在于主串(String)中。该函数调用了kmp_...

    C#与Erlang的群通信

    3. **Message Queuing**:通过消息队列(如RabbitMQ)进行异步通信,C#和Erlang都可以作为生产者或消费者。 4. **Protobuf或JSON序列化**:定义共同的数据结构,通过protobuf或JSON格式在两者间交换数据。 5. **...

    erlang资源

    1. **并发模型**:Erlang的并发基于轻量级进程(Lightweight Processes, LSPs),这些进程间的通信通过消息传递实现,这与传统的线程模型不同,具有更好的隔离性和容错性。 2. ** OTP(Open Telecom Platform)**:...

    Erlang入门:构建application练习5(监督树)

    Erlang是一种面向并发的、函数式编程语言,特别适合于构建高可用性和容错性的分布式系统。...这个练习帮助初学者理解Erlang OTP的设计原则和实际应用,是深入学习Erlang并发编程和系统架构的重要步骤。

    Erlang和RabbitMQ

    在实际应用中,开发者可以利用RabbitMQ实现微服务间的异步通信,通过创建生产者和消费者来发送和接收消息。Erlang的强大力量在于其对分布式系统和并发处理的支持,这使得RabbitMQ成为许多大型分布式系统中不可或缺的...

    erlang 20.3.zip

    它可以将生产者和消费者之间的消息传递隔离开来,提高系统的响应速度和可靠性。Erlang的并发特性和天然的分布式能力使得RabbitMQ在处理高并发消息传递时表现出色。 在部署RabbitMQ之前,确保已正确安装Erlang环境,...

Global site tag (gtag.js) - Google Analytics