From 616b7afb724a32df41eebfaf95402d008c60b411 Mon Sep 17 00:00:00 2001 From: Graydon Hoare Date: Wed, 8 Sep 2010 19:13:49 -0700 Subject: Tidy up the sync dir, remove dead or mis-designed code in favour of OS primitives, switch rust_kernel to use a lock/signal pair and wait rather than spin. --- src/rt/sync/fair_ticket_lock.cpp | 43 ---------------------------------------- 1 file changed, 43 deletions(-) delete mode 100644 src/rt/sync/fair_ticket_lock.cpp (limited to 'src/rt/sync/fair_ticket_lock.cpp') diff --git a/src/rt/sync/fair_ticket_lock.cpp b/src/rt/sync/fair_ticket_lock.cpp deleted file mode 100644 index 0306ee1d..00000000 --- a/src/rt/sync/fair_ticket_lock.cpp +++ /dev/null @@ -1,43 +0,0 @@ -/* - * This works well as long as the number of contending threads - * is less than the number of processors. This is because of - * the fair locking scheme. If the thread that is next in line - * for acquiring the lock is not currently running, no other - * thread can acquire the lock. This is terrible for performance, - * and it seems that all fair locking schemes suffer from this - * behavior. - */ - -// #define TRACE - -fair_ticket_lock::fair_ticket_lock() { - next_ticket = now_serving = 0; -} - -fair_ticket_lock::~fair_ticket_lock() { - -} - -void fair_ticket_lock::lock() { - unsigned ticket = __sync_fetch_and_add(&next_ticket, 1); - while (now_serving != ticket) { - pause(); - } -#ifdef TRACE - printf("locked nextTicket: %d nowServing: %d", - next_ticket, now_serving); -#endif -} - -void fair_ticket_lock::unlock() { - now_serving++; -#ifdef TRACE - printf("unlocked nextTicket: %d nowServing: %d", - next_ticket, now_serving); -#endif -} - -void fair_ticket_lock::pause() { - asm volatile("pause\n" : : : "memory"); -} - -- cgit v1.2.3