1996 2007 Ericsson AB, All Rights Reserved The contents of this file are subject to the Erlang Public License, Version 1.1, (the "License"); you may not use this file except in compliance with the License. You should have received a copy of the Erlang Public License along with this software. If not, it can be retrieved online at http://www.erlang.org/. Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. The Initial Developer of the Original Code is Ericsson AB. pg
pg Distributed, Named Process Groups

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.

create(PgName) -> ok | {error, Reason} Create an empty group PgName = term() Reason = already_created | term()

Creates an empty group named PgName on the current node.

create(PgName, Node) -> ok | {error, Reason} Create an empty group on another node PgName = term() Node = node() Reason = already_created | term()

Creates an empty group named PgName on the node Node.

join(PgName, Pid) -> Members Join a pid to a process group 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) -> void() Send a message to all members of a process group 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) -> void() Send a message to all members of a process group, except ourselves 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 Return a list of all members of a process group PgName = term() Members = [pid()]

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