[SPCA] Finish multicore

This commit is contained in:
2026-01-22 13:06:24 +01:00
parent f7eeac5470
commit adac7e17d3
7 changed files with 135 additions and 2 deletions

View File

@@ -0,0 +1,28 @@
#include <stdlib.h>
struct qnode {
struct qnode *next;
int locked;
};
typedef struct qnode *lock_t;
void acquire( lock_t *lock, struct qnode *local ) {
local->next = NULL;
struct qnode *prev = XCHG( lock, local );
if ( prev ) { // queue was non-empty
local->locked = 1;
prev->next = local;
while ( local->locked )
; // spin
}
}
void release( lock_t *lock, struct qnode *local ) {
if ( local->next == NULL ) {
if ( CAS( lock, local, NULL ) )
return;
while ( local->next == NULL )
; // spin
}
local->next->locked = 0;
}