swfc@cs.columbia.edu (Shu-Wie F Chen) (09/29/90)
I am porting some Concurrency Control code for Sun-3s (68020-based)
over to a uVax 3600. Since CC needs atomic instructions, the original
implementors wrote a C interface to the 020 cas and cas2 instructions
and used cas to implement atomic increment, atomic queue insertion,
and binary P/V (no comments on efficiency please, at least not yet).
I have two choices:
1. write a C-interface cas for the Vax which does not have a cas
instruction
2. write atomic increment using the Vaxen INCL instruction, use
Ultrix's semaphore packages, and somehow write the atomic queue
insertion.
The problem is that I don't know Vax assembly well enough to know how
to write cas (I do know enough to have written inc based on INCL) nor
do I know enough to be able to write the atomic queue insertion.
If you have any solutions or ideas, please send e-mail. Any
suggestions on efficiency are also welcome.
I've included the original implementation of ins and P for reference.
ins(p,n)
struct node *p, *n;
{
struct node *new, *old;
do {
old = p->next;
n->next = old;
} while (cas(old, new, &p->next));
}
P(sem)
bsem *sem;
{
do
;
while(cas(GREEN, RED, sem));
}
advTHANKSance,
*swfc
--
-------------------------------------------------------------------------------
Shu-Wie F Chen Columbia University Department of Computer Science
swfc@cs.columbia.edu 500 W120th Street, New York, NY 10027