99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

Erlang 注冊(cè)進(jìn)程名稱

2022-07-07 15:41 更新

Erlang注冊(cè)進(jìn)程名稱

上面的例子中,因?yàn)?“Pong” 在 “ping” 進(jìn)程開始前已經(jīng)創(chuàng)建完成,所以才能將 “pong” 進(jìn)程的進(jìn)程標(biāo)識(shí)符作為參數(shù)傳遞給進(jìn)程 “ping”。這也就說(shuō),“ping” 進(jìn)程必須通過(guò)某種途徑獲得 “pong” 進(jìn)程的進(jìn)程標(biāo)識(shí)符后才能將消息發(fā)送 “pong” 進(jìn)程。然而,某些情況下,進(jìn)程需要相互獨(dú)立地啟動(dòng),而這些進(jìn)程之間又要求知道彼此的進(jìn)程標(biāo)識(shí)符,前面提到的這種方式就不能滿足要求了。因此,Erlang 提供了為每個(gè)進(jìn)程提供一個(gè)名稱綁定的機(jī)制,這樣進(jìn)程間通信就可以通過(guò)進(jìn)程名來(lái)實(shí)現(xiàn),而不需要知道進(jìn)程的進(jìn)程標(biāo)識(shí)符了。為每個(gè)進(jìn)程注冊(cè)一個(gè)名稱需要用到內(nèi)置函數(shù) register:

register(some_atom, Pid)

接下來(lái),讓我們一起上面的 ping pong 示例程序。這一次,我們?yōu)?“pong” 進(jìn)程賦予了一名進(jìn)程名稱 pong:

-module(tut16).

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

ping(0) ->
    pong ! finished,
    io:format("ping finished~n", []);

ping(N) ->
    pong ! {ping, self()},
    receive
        pong ->
            io:format("Ping received pong~n", [])
    end,
    ping(N - 1).

pong() ->
    receive
        finished ->
            io:format("Pong finished~n", []);
        {ping, Ping_PID} ->
            io:format("Pong received ping~n", []),
            Ping_PID ! pong,
            pong()
    end.

start() ->
    register(pong, spawn(tut16, pong, [])),
    spawn(tut16, ping, [3]).
2> c(tut16).
{ok, tut16}
3> tut16:start().
<0.38.0>
Pong received ping
Ping received pong
Pong received ping
Ping received pong
Pong received ping
Ping received pong
ping finished
Pong finished

start/0 函數(shù)如下:

register(pong, spawn(tut16, pong, [])),

創(chuàng)建 “pong” 進(jìn)程的同時(shí)還賦予了它一個(gè)名稱 pong。在 “ping” 進(jìn)程中,通過(guò)如下的形式發(fā)送消息:

pong ! {ping, self()},

ping/2 變成了 ping/1。這是因?yàn)椴辉傩枰獏?shù) Pong_PID 了。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)