XML

kent logo

CO631 Anonymous Questions and Answers Keyword Index

This page provides a keyword index to questions and answers. Clicking on a keyword will take you to a page containing all questions and answers for that keyword, grouped by year.

To submit a question, use the anonymous questions page. You may find the keyword index and/or top-level index useful for locating past questions and answers.

Keyword reference for fair-alt

2003

Question 96 (2003):

I'm trying to do a fair-ALT, but there are 11 channels to ALT over and thats a lot of of code! I was wondering is there a way of looping around FOR statements? What I mean is if the first time you write, say,

    ALT i = 0 FOR 5

is there anyway so that the second time I can write

    ALT i = 1 FOR 5

but have it so the 5th iteration loops back to channel 0 (i.e. the one I started on the first time). Sorry if thats unclear.

Answer 96:

I'm not sure what you're asking here -- at a guess you're confused as to the operation of a replicated-ALT. One key idea is that it is a replicator, not a loop as such. Writing:

    ALT i = 0 FOR 5
      in[i] ? x
        P(x)

is equivalent to:

    ALT
      in[0] ? x
        P(x)
      in[1] ? x
        P(x)
      in[2] ? x
        P(x)
      in[3] ? x
        P(x)
      in[4] ? x
        P(x)

For more information, look in the course notes that describe the ALT, around slide 5-29. The code for a fair-ALT is also given explicitly on slide 10-23, as you have been told many times! Also check out other related anonymous questions, particularly those on alternation and the fair-alt.

Keywords: fair-alt , q7

2002

Question 33 (2002):

Hi, it has been strongly suggested by our seminar leader that we use protocols for the state report channels to the display process. The reports disclose the any change is state from the philosphers, forks and the security guard. Obviously you need to fair multiplex all the philosphers together and all the forks??? However, how can you multiplex three different protocols together??? You can't can you? If not, then I guess we write some display process with three input channels one for each protocol, and work that way.

Answer 33:

Fair mulitplex the philospher reports down to one channel. Same for the forks. That leaves 3 channels, with different protocols, coming to the display process - say a, b and c. To fair-alt those:

  WHILE TRUE
    SEQ
      PRI ALT
        a ? ...
          ...  react to the a mess
        b ? ...
          ...  react to the b mess
        c ? ...
          ...  react to the c mess
      PRI ALT
        b ? ...
          ...  react to the b mess
        c ? ...
          ...  react to the c mess
        a ? ...
          ...  react to the a mess
      PRI ALT
        c ? ...
          ...  react to the c mess
        a ? ...
          ...  react to the a mess
        b ? ...
          ...  react to the b mess

Bit repetitive writing the reaction codes thrice ... so make a PROC for each reaction ... just invoke that PROC thrice.

However, simpler-but-more-dangerous is just to have one protocol that all philosophers, forks and the security guard to use - that's 11 channels, all with the same super-protocol, coming out of the college. Plug those into the display and simply fair-alt that!

It's unsafe to use one protocol for all reports - since a fork, for example, could send a philosopher report by mistake! This is the sort of thing that can happen somewhere down the life-cycle of a product during maintenance. However, for this exercise, you will not lose marks for doing so ... so long as, of course, you don't make any mistakes that this approach allows!

Keywords: q7 , fair-alt

2001

Question 27 (2001):

I am having trouble modifing the fork process in the dining philosopher's question. What I want to do is basically have a fair ALTing process going over the two input lines, left and right.

I have already implemented a fair ALTing process in my animate process, but the difference there was that all the input lines were called the same name -- i.e. state[0], state[1] etc., so implementing it there was easy from the definition given in the notes. The problem with the fork process is that the input lines have two distinct names, and so the definition of fair ALTing does not translate as obviously.

What I have tried to do is give them the same name, so in the fork header I have put '[]CHAN OF BOOL in', but I could not get it to work this way after many attempts. My question is: is this the correct way to be going about altering fork?

Answer 27:

There are two ways. One is to create a channel array abbreviation for the two scaler channels - i.e.

  [2]CHAN OF BOOL c IS [left, right]:

Normal anti-aliasing rules now apply - you can't use the names left and right anymore (because you have the new names, c[0] and c[1], for them). But you now have an array of channels and the usual fair ALTing coding (see slide 10-23) can now be applied.

Second way: don't be clever and just write:

  WHILE TRUE
    SEQ
      PRI ALT              -- first give left priority
        left ? ..
          ..
        right ? ..
          ..
      PRI ALT              -- then give right priority
        right ? ..
          ..
        left ? ..
          ..

Keywords: q7 , fair-alt

Valid CSS!

Valid XHTML 1.0!

Last modified Mon May 15 17:39:45 2006
This document is maintained by Fred Barnes, to whom any comments and corrections should be addressed.