Provided by: erlang-manpages_16.b.3-dfsg-1ubuntu2.2_all bug

NAME

       pg - Distributed, Named Process Groups

DESCRIPTION

       This  (experimental)  module  implements  process  groups.  A  process group is a group of
       processes that can be accessed by a common name. For example, a  group  named  foobar  can
       include  a  set of processes as members of this group and they can be located on different
       nodes.

       When messages are sent to the named group, all members of the group receive  the  message.
       The  messages  are  serialized.  If  the process P1 sends the message M1 to the group, and
       process P2 simultaneously sends message M2, then all members of the group receive the  two
       messages  in  the  same  order.  If  members  of a group terminate, they are automatically
       removed from the group.

       This module is not complete. The module is inspired by the  ISIS  system  and  the  causal
       order  protocol of the ISIS system should also be implemented. At the moment, all messages
       are serialized by sending them through a group master process.

EXPORTS

       create(PgName) -> ok | {error, Reason}

              Types:

                 PgName = term()
                 Reason = already_created | term()

              Creates an empty group named PgName on the current node.

       create(PgName, Node) -> ok | {error, Reason}

              Types:

                 PgName = term()
                 Node = node()
                 Reason = already_created | term()

              Creates an empty group named PgName on the node Node.

       join(PgName, Pid) -> Members

              Types:

                 PgName = term()
                 Pid = pid()
                 Members = [pid()]

              Joins the pid Pid to the process group PgName. Returns a list of all old members of
              the group.

       send(PgName, Msg) -> ok

              Types:

                 PgName = Msg = term()

              Sends the tuple {pg_message, From, PgName, Msg} to all members of the process group
              PgName.

              Failure: {badarg, {PgName, Msg}} if PgName is  not  a  process  group  (a  globally
              registered name).

       esend(PgName, Msg) -> ok

              Types:

                 PgName = Msg = term()

              Sends the tuple {pg_message, From, PgName, Msg} to all members of the process group
              PgName, except ourselves.

              Failure: {badarg, {PgName, Msg}} if PgName is  not  a  process  group  (a  globally
              registered name).

       members(PgName) -> Members

              Types:

                 PgName = term()
                 Members = [pid()]

              Returns a list of all members of the process group PgName.