3

目前,我正在使用以下内容单独创建和注册进程:

register(name, spawn(fun() -> myfun())).

我想创建一个包含 N 个已注册 Pid 的列表,其名称如下:

pid1
pid2
pid3
.
.
.
pidN

任何人都可以推荐一种方法吗?

4

2 回答 2

8

如果你想为同一个函数生成多个进程,你可以使用列表推导并使用字符串的连接和list_to_atom/1

[register(list_to_atom("pid" ++ integer_to_list(X)), spawn(fun() -> myFun() end)) || X <- lists:seq(1,10)].
于 2012-08-02T14:28:09.090 回答
1

您可能会使用以下内容:

如果您想在多个进程中执行相同的功能并以不同的名称注册每个进程:

lists:foreach( 
   fun( Name ) -> 
      register( Name, spawn( fun() -> myfun() end ) ) 
   end, 
   [ pid1, pid2, pid3 ] ).

或者如果您想在不同的进程中执行不同的功能:

lists:foreach( 
   fun( { Name, Func } ) -> 
      register( Name, spawn( fun() -> Func() end ) ) 
   end, 
   [ { pid1, f1 }, { pid2, f2 }, { pid3, f3 } ] ).

( f1, f2, f3 - 是函数)

最后,如果您想在 N 个进程中执行相同的功能,您可以执行以下操作:

N = 20, %number of processes
lists:map( 
   fun( Num ) -> 
      register( 
         list_to_atom( "pid" ++ integer_to_list( Num ) ), 
         spawn( fun() -> myfun() end ) ) 
   end, 
   lists:seq( 1, N ) ).
于 2012-08-02T14:22:04.893 回答