7 void StackOp (ThreadInfo * pInfo) {
8 if (TryPerformStackOp (p) == FALSE)
13 void LesOP (ThreadInfo * p) {
16 pos = GetPosition (p);
18 while (!CAS (&collision[pos], him, mypid))
22 if (q != NULL && q->id == him && q->op != p->op) {
23 if (CAS (&location[mypid], p, NULL)) {
24 if (TryCollision (p, q) == TRUE)
34 if (!CAS (&location[mypid], p, NULL)) {
39 if (TryPerformStackOp (p) == TRUE)
45 bool TryPerformStackOp (ThreadInfo * p) {
49 p->cell.pnext = phead;
50 if (CAS (&S.ptop, phead, &p->cell))
62 if (CAS (&S.ptop, phead, pnext)) {
72 void FinishCollision (ProcessInfo * p) {
74 p->pcell = location[mypid]->pcell;
75 location[mypid] = NULL;
79 void TryCollision (ThreadInfo * p, ThreadInfo * q) {
81 if (CAS (&location[him], q, p))
87 if (CAS (&location[him], q, NULL)) {
89 location[mypid] = NULL;