Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revisionBoth sides next revision | ||
| alvis:in [2015/11/24 15:33] marcin | — (current) | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== In statement ====== | ||
| - | |||
| - | An agent can communicate with its outside world using **ports**. Each port can be used both as an input or an output one. The current role of a port is determined by two factors: | ||
| - | - Connections to the port in the corresponding communication diagram -- e.g. if a port '' | ||
| - | - Statements used in the code layer -- e.g. if a port '' | ||
| - | |||
| - | Any communication through a port can be a **pure communication** or a **value passing combination**. | ||
| - | |||
| - | In case of a **pure communication**, | ||
| - | |||
| - | In case of a **value passing communication**, | ||
| - | |||
| - | |||
| - | The **in** statement as a **blocking communication** is a single-step statement. | ||
| - | |||
| - | < | ||
| - | in p; | ||
| - | in p x; | ||
| - | </ | ||
| - | |||
| - | **Listing 1. ** In statement syntax (blocking version): '' | ||
| - | |||
| - | |||
| - | |||
| - | ===== Example 1 ===== | ||
| - | |||
| - | {{: | ||
| - | |||
| - | **Figure 1. ** Example 1 communication diagram | ||
| - | |||
| - | < | ||
| - | agent A { | ||
| - | out a; | ||
| - | } | ||
| - | |||
| - | agent B { | ||
| - | in b; | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | **Listing 2. ** Example 1 code layer | ||
| - | |||
| - | The only task of agent '' | ||
| - | |||
| - | A communication between two active agents can be initialised by any of them. The agent that initialises it, performs the **out** statement to provide some information and waits for the second agent to take it, or performs the **in** statement to express its readiness to collect some information and waits until the second agent provides it. | ||
| - | |||
| - | ===== Example 2 ===== | ||
| - | |||
| - | {{: | ||
| - | |||
| - | **Figure 2. ** Example 2 communication diagram | ||
| - | |||
| - | < | ||
| - | agent A { | ||
| - | out a; | ||
| - | } | ||
| - | |||
| - | agent B { | ||
| - | in b; | ||
| - | } | ||
| - | |||
| - | agent C { | ||
| - | in c; | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | **Listing 2. ** Example 2 code layer | ||
| - | |||
| - | In the above example the port '' | ||
| - | |||
| - | |||
| - | A **blocking communication** means that if an agent initialises a communication with the **in** statement then it waits until another agent finishes it. The communication cannot be aborted. | ||
| - | |||
| - | The **in** statement as an **non-blocking communication** may be a single-step or multi-step statement. | ||
| - | |||
| - | |||
| - | < | ||
| - | in (0) p x { | ||
| - | success { ... } | ||
| - | fail { ... } | ||
| - | } | ||
| - | |||
| - | in (0) p x { | ||
| - | fail { ... } | ||
| - | } | ||
| - | |||
| - | in (0) p x { | ||
| - | success { ... } | ||
| - | } | ||
| - | |||
| - | in (0) p x; | ||
| - | |||
| - | in (0) p { | ||
| - | success { ... } | ||
| - | fail { ... } | ||
| - | } | ||
| - | |||
| - | in (0) p { | ||
| - | fail { ... } | ||
| - | } | ||
| - | |||
| - | in (0) p { | ||
| - | success { ... } | ||
| - | } | ||
| - | |||
| - | in (0) p; | ||
| - | </ | ||
| - | |||
| - | **Listing 4. ** In statement syntax (non-blocking version): '' | ||
| - | |||
| - | A communication with a passive agent denotes a procedure call. | ||
| - | |||
| - | **See also:** [[: | ||
| - | |||
| - | **[[: | ||
| - | |||
| - | |||