resource A() write("age()=", age(), "resource A is alive") process pA nap(10000); write("age()=", age(), "resource A is done napping") end pA final write("age()=", age(), "resource A has (been) terminated") end final end A resource B() write("age()=", age(), "resource B is alive") process pB write("age()=", age(), "resource B is done") end pB final write("age()=", age(), "resource B has (been) terminated") end final end B resource C() write("age()=", age(), "resource C is alive") process pC nap(45000); write("age()=", age(), "resource C is done napping") end pC end C resource D() write("age()=", age(), "resource D is alive") process pD write("age()=", age(), "resource D is done") end pD end D global E() write("age()=", age(), "global E is alive") process pE nap(20000); write("age()=", age(), "global E is done napping") end pE final write("age()=", age(), "global E has (been) terminated") end final end E global F() write("age()=", age(), "global F is alive") process pF write("age()=", age(), "global F is done") end pF final write("age()=", age(), "global F has (been) terminated") end final end F global G() write("age()=", age(), "global G is alive") process pG nap(25000); write("age()=", age(), "global G is done napping") end pG end G global H() write("age()=", age(), "global H is alive") process pH write("age()=", age(), "global H is done") end pH end H resource test_final_blocks() import A, B, C, D, E, F, G, H write("age()=", age(), "main resource is alive") var N : int := 1; getarg(1, N) var cA : cap A, cB : cap B, cC : cap C, cD : cap D cA := create A(); cB := create B(); cC := create C(); cD := create D() nap(5000); write("age()=", age(), "main resource is done napping") if N = 1 -> write("age()=", age(), "normal termination") [] N = 2 -> write("age()=", age(), "stop"); stop [] N = 3 -> write("age()=", age(), "stop(1)"); stop(1) [] N = 4 -> write("age()=", age(), "destroy...") destroy(cA); destroy(cB); destroy(cC); destroy(cD) write("age()=", age(), "destroyed") fi final write("age()=", age(), "main resource has (been) terminated") end final end test_final_blocks /* ............... Example compile and run(s) % sr -v; sr -o test_final_blocks test_final_blocks.sr SR version 2.3, October 1994 % ./test_final_blocks 1 age()= 22 global E is alive age()= 34 global F is alive age()= 45 global F is done age()= 47 global G is alive age()= 48 global H is alive age()= 58 global H is done age()= 59 main resource is alive age()= 63 resource A is alive age()= 65 resource B is alive age()= 74 resource B is done age()= 76 resource C is alive age()= 77 resource D is alive age()= 87 resource D is done age()= 5110 main resource is done napping age()= 5111 normal termination age()= 10065 resource A is done napping age()= 20036 global E is done napping age()= 25055 global G is done napping age()= 45085 resource C is done napping age()= 45086 main resource has (been) terminated age()= 45088 global E has (been) terminated age()= 45089 global F has (been) terminated % ./test_final_blocks 2 age()= 22 global E is alive age()= 34 global F is alive age()= 44 global F is done age()= 46 global G is alive age()= 48 global H is alive age()= 57 global H is done age()= 58 main resource is alive age()= 62 resource A is alive age()= 64 resource B is alive age()= 73 resource B is done age()= 75 resource C is alive age()= 76 resource D is alive age()= 85 resource D is done age()= 5098 main resource is done napping age()= 5099 stop age()= 5100 main resource has (been) terminated age()= 5102 global E has (been) terminated age()= 5103 global F has (been) terminated % ./test_final_blocks 3 age()= 23 global E is alive age()= 34 global F is alive age()= 44 global F is done age()= 46 global G is alive age()= 47 global H is alive age()= 57 global H is done age()= 58 main resource is alive age()= 62 resource A is alive age()= 64 resource B is alive age()= 73 resource B is done age()= 74 resource C is alive age()= 76 resource D is alive age()= 85 resource D is done age()= 5095 main resource is done napping age()= 5096 stop(1) % ./test_final_blocks 4 age()= 22 global E is alive age()= 34 global F is alive age()= 43 global F is done age()= 45 global G is alive age()= 47 global H is alive age()= 56 global H is done age()= 58 main resource is alive age()= 62 resource A is alive age()= 63 resource B is alive age()= 73 resource B is done age()= 75 resource C is alive age()= 76 resource D is alive age()= 86 resource D is done age()= 5094 main resource is done napping age()= 5095 destroy... age()= 5096 resource A has (been) terminated age()= 5098 resource B has (been) terminated age()= 5099 destroyed age()= 20034 global E is done napping age()= 25054 global G is done napping age()= 25056 main resource has (been) terminated age()= 25057 global E has (been) terminated age()= 25058 global F has (been) terminated */