diff options
author | Erlang/OTP <[email protected]> | 2009-11-20 14:54:40 +0000 |
---|---|---|
committer | Erlang/OTP <[email protected]> | 2009-11-20 14:54:40 +0000 |
commit | 84adefa331c4159d432d22840663c38f155cd4c1 (patch) | |
tree | bff9a9c66adda4df2106dfd0e5c053ab182a12bd /lib/percept/doc/src/ipc_tree.erl | |
download | otp-84adefa331c4159d432d22840663c38f155cd4c1.tar.gz otp-84adefa331c4159d432d22840663c38f155cd4c1.tar.bz2 otp-84adefa331c4159d432d22840663c38f155cd4c1.zip |
The R13B03 release.OTP_R13B03
Diffstat (limited to 'lib/percept/doc/src/ipc_tree.erl')
-rw-r--r-- | lib/percept/doc/src/ipc_tree.erl | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/lib/percept/doc/src/ipc_tree.erl b/lib/percept/doc/src/ipc_tree.erl new file mode 100644 index 0000000000..89360379c6 --- /dev/null +++ b/lib/percept/doc/src/ipc_tree.erl @@ -0,0 +1,30 @@ +-module(ipc_tree). +-export([go/1, init/2]). + +go(N) -> + start(N, self()), + receive {_,stop} -> ok end. + +start(Depth, ParentPid) -> + spawn(?MODULE, init, [Depth, ParentPid]). + +init(0, ParentPid) -> + workload(5000), + ParentPid ! {self(),stop}, + ok; +init(Depth, ParentPid) -> + Pid1 = spawn(?MODULE, init, [Depth - 1, self()]), + Pid2 = spawn(?MODULE, init, [Depth - 1, self()]), + main([Pid1,Pid2], ParentPid). + +main(Pids, ParentPid) -> + workload(5000), + gather(Pids), + ParentPid ! {self(),stop}, + ok. + +gather([]) -> ok; +gather([Pid|Pids]) -> receive {Pid,stop} -> gather(Pids) end. + +workload(0) -> ok; +workload(N) -> math:sin(2), workload(N - 1). |