Inter-process communication is achieved in many concurrent programming
languages through message entries. Many of these languages contain in
ter-entry selection constructs allowing a process to selectively choos
e one of a group of message entries to service. Generally, this select
ion process is handled non-deterministically. To enable a degree of co
ntrol over this selection, limited inter-entry selection control mecha
nisms are available in several of these languages. This paper reviews
the need for more expressive inter-entry selection control mechanisms
and details the design and implementation of two such control mechanis
ms-static and dynamic preferences. These implementations of static and
dynamic preferences, SRps and SRpd respectively, are extensions of th
e SR concurrent programming language. In both implementations, the use
of preferences is optional, and thus, the overhead associated with th
eir use is incurred only when their use is necessary. Finally, this pa
per describes the performance of these implementations on several clas
sical synchronization problems. For tests run in a shared memory envir
onment the results show that there is substantial cost associated with
the preference implementations. However, the results of the distribut
ed environment tests illustrate that the incremental cost of adding pr
eferences is small and often not discernable when the overhead costs a
ssociated with communications across a network are considered. Copyrig
ht (C) 1997 Elsevier Science Ltd.