Erlang生产者消费者模型问题:传递并打印随机生成数
修正后的代码
-module(cooperate). -compile(export_all). producer(_Pid, 0) -> done; producer(Pid, N) -> RandomNum = rand:uniform(N), Pid ! {producer, RandomNum}, io:format("process ~p producing ~p~n", [self(), RandomNum]), producer(Pid, N-1). consumer() -> receive {producer, RandomNum} -> timer:sleep(10), io:format("process ~p consuming ~p~n", [self(), RandomNum]), consumer() after 40 -> stopping_terminus end. go() -> Pid = spawn(cooperate, consumer, []), spawn(cooperate, producer, [Pid, 3]).
关键改动说明
- 生产者端:
- 新增变量
RandomNum存储生成的随机数,避免直接丢弃结果 - 发送消息时传递该随机数变量,而非原代码中的递减数值
N - 修正了原代码
producer(_Pid, 0) -的语法错误,将-改为->
- 新增变量
- 消费者端:
- 调整消息匹配规则,接收并绑定生产者发送的随机数变量
- 打印逻辑直接使用该变量,确保输出与生产者生成的随机数一致
运行修正后的代码,即可实现你期望的效果:生产者生成随机数并打印,消费者接收该随机数并打印。
内容的提问来源于stack exchange,提问作者Andy891357
相关产品推荐
相关产品推荐

