mirror of
https://github.com/EiffelSoftware/eiffel-org.git
synced 2025-12-08 07:42:33 +01:00
Author:halw
Date:2011-02-08T17:02:28.000000Z git-svn-id: https://svn.eiffel.com/eiffel-org/trunk@753 abb3cda0-5349-4a8f-a601-0c33ac3a8c38
This commit is contained in:
@@ -134,6 +134,17 @@ So, according to this rule, for a separate call to be valid, the target of the c
|
||||
|
||||
In the code above, <code>my_separate_attribute</code> is a class attribute declared as a separate type. In the first line in <code>calling_routine</code> a direct feature call is made to apply <code>some_feature</code> to <code>my_separate_attribute</code>. This is an invalid separate call. The second line calls feature <code>enclosing_routine</code> and passes <code>my_separate_attribute</code> as an argument. <code>enclosing_routine</code> takes an argument of type <code>separate SOME_TYPE</code>. Within <code>enclosing_routine</code> it is valid to call <code>some_feature</code> on <code>a_arg</code>.
|
||||
|
||||
In <code>calling_routine</code> above, the call to <code>enclosing_routine</code> has a separate argument:
|
||||
|
||||
<code>
|
||||
enclosing_routine (my_separate_attribute) -- Separate attribute passed as argument
|
||||
</code>
|
||||
|
||||
Because the argument <code>my_separate_argument</code> is of a separate type, then it is subject to be handled by a processor different from the one on which the call to <code>enclosing_routine</code> occurs. As a result, the execution of <code>enclosing_routine</code> will be delayed until the time that the processor which handles <code>my_separate_argument</code> is available for exclusive access. This type of delay is described by the ''Wait rule''.
|
||||
|
||||
|
||||
{{Rule|name=Wait|text=A routine call with separate arguments will execute when all corresponding processors are available and hold them exclusively for the duration of the routine.}}
|
||||
|
||||
|
||||
{{SeeAlso|The <code>launch_producer</code> feature of the [[Producer-consumer|producer-consumer]] example, a feature which exists for the purpose of compliance with the separate argument rule.}}
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
[[Property:title|Dining philosophers]]
|
||||
[[Property:weight|-12]]
|
||||
[[Property:uuid|ec90654b-723a-ed0f-0325-09a8918bfe10]]
|
||||
[[Property:uuid|569f012e-7913-fbdf-7ad7-cd17d82e64aa]]
|
||||
{{UnderConstruction}}
|
||||
|
||||
|
||||
{{Beta}}
|
||||
@@ -9,9 +10,11 @@
|
||||
|
||||
=Description=
|
||||
|
||||
In the [http://en.wikipedia.org/wiki/Dining_philosophers_problem dining philosopers] a number of philosophers (five, in our example) are seated around a circular table. On the table are five plates of food, one in front of each philosopher, and five forks, one between each adjacent pair of plates. So each philosopher has a plate in front of him and a fork to his left and a fork to his right.
|
||||
In the [http://en.wikipedia.org/wiki/Dining_philosophers_problem dining philosopers] a number of philosophers (five, in our example) are seated at a round table. On the table are five plates of food, one in front of each philosopher, and five forks, one between each adjacent pair of plates. So each philosopher has a plate in front of him and a fork to his left and a fork to his right.
|
||||
|
||||
The philosophers spend all their time in either of only two states: they are thinking or they are eating. The philosophers may be brilliant thinkers, but apparently manual dexterity is not their strong suit. This is evidenced by the fact that while eating, any philosopher must pick up both of the forks positioned on either side of that philosopher's plate. So, while eating they must have possession of both forks, and while thinking, they have put down any forks that they had previously used.
|
||||
The philosophers spend all their time in either of only two states: they are thinking or they are eating. The philosophers may be brilliant thinkers, but apparently manual dexterity is not their strong suit. This is evidenced by the fact that while eating, any philosopher must pick up both of the forks positioned next to his plate. So, while eating he must have possession of both forks, and while thinking, he has put down any forks that he had previously used. Therefore, any particular philosopher has the opportunity to eat only when the two philosophers on either side of him are thinking and have made their forks available.
|
||||
|
||||
Apart from any negative consequences of these questionable sanitary practices, the dining philosophers can, in improperly designed solutions, encounter problems related to concurrency. For example, if all philosophers were to pick up the fork to their right and then wait for the fork to their left to become available (or vice versa), they would achieve a ''deadlock''. A ''starvation'' situation might occur if, because of unfairness in the solution algorithm, one or more philosophers get stuck in thinking mode because they can never secure the two forks necessary to eat.
|
||||
|
||||
|
||||
=Highlights=
|
||||
|
||||
Reference in New Issue
Block a user