| : Are there system routines on VMS/Alpha which support the same
: functionality ?
This is the OpenVMS conference -- the DEC C conference is located at
TURRIS::DECC.
Yes, there are DEC C built-ins that perform these tasks -- here are
a few of the OpenVMS Alpha built-ins extracted from the DEC C manual:
6.2.1.53 __PAL_INSQHIL
This function inserts an entry at the front of a longword
queue in an indivisible manner. This operation is interlocked
against similar operations by other processors or devices in
the system. This function must have write access to header
and queue entries. The pointers to head and new_entry must
not be equal.
This function has the following format:
int __PAL_INSQHIL(void *head, void *new_entry); / At head, interlocked */
--
6.2.1.61 __PAL_INSQUEL
This function inserts a new entry after an existing entry into
a longword queue. This function must have write access to
header and queue entries.
This function has the following format:
int __PAL_INSQUEL(void *predecessor, void *new_entry );
--
Online documentation for DEC C for the OpenVMS Alpha and the OpenVMS
VAX platforms, in Postscript and bookreader formats, is available at
decc::decc$kit:[alpha] and at decc::decc$kit:[vax], respectively.
--
And note that there are RTL routines that perform interlocked queue
manipulations: LIB$INSQHI, etc. These are documented in the RTL
manual -- see notes 8.* and 9.* for pointers to the documentation
in Postscript and Bookreader format, and for how to order the
documentation from SSB.
|
| And just like on VAX, the absolute-queue version (INSQUEL, REMQUEL, ...)
are not protected against simultaneous use by separate threads on a
multiprocessor. For that you need the relative-queue versions (INSQHIL,
REMQTIL, ...)
|