新大陆计划

本文介绍了一个基于Erlang的有限状态机(FSM)模型实现,该模型用于资源进程管理,支持数据获取、设置及链接等功能,并通过不同状态来确保数据的安全访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

-module(res_prc).
-behaviour(gen_fsm).
-export([create/1]).
-export([init/1, recv_prc/2]).
-export([send_evt/2]).


-record
(
    obj_data,
    {
        link = 0,
        data = []
    }
).


%% 初始化锁
create( Data ) ->
    gen_fsm:start_link( res_prc, #obj_data{data=Data}, [] ).
init( ObjData ) ->
    io:format( "init Pid :~p~n", [self()] ),
    { ok, state_unlink, ObjData }.

%% 获得数据
get() ->
    gen_fsm:send_event( self(), {cmd_get, self()} ).

%% 设置数据
set( Data ) ->
    gen_fsm:send_event( self(), {cmd_set, self(), Data} ).

%% 链接
link() ->
    gen_fsm:send_event( self(), {cmd_link, self()} ).

%% 解链
unlink() ->
    gen_fsm:send_event( self(), {cmd_unlink, self()} ).

% 无链接状态 %
state_unlink( Cmd, ObjData ) ->
    case Cmd of
        {cmd_get, Pid} ->
            Pid!ObjData#obj_data.data,
            { next_state, state_unlink, ObjData };
        {cmd_link, Pid} ->
            Pid!{ ok, self() },
            { next_state, state_link, #obj_data{link=Pid, data=ObjData#obj_data.data} };
        Default ->
            { next_state, state_unlink, ObjData }
    end.

    
% 链接状态 %
state_link( Cmd, ObjData ) ->
    case Cmd of
        {cmd_get, Pid} ->
            Pid!ObjData#obj_data.data,
            { next_state, state_link, ObjData };
        {cmd_set, ObjData#obj_data.link, Data} ->
            { next_state, state_link, #obj_data{link=ObjData#obj_data.data, data=Data} };
        {cmd_unlink, ObjData#obj_data.link} ->
            { next_state, state_unlink, #obj_data{link=0, data=ObjData#obj_data.data} };
        Default ->
            { next_state, state_link, ObjData }
    end.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值