Learn More
1 ABSTRACT 1 Synchronization overhead, contention, and deadlock can pose severe challenges to designers and implementers of parallel programs. Therefore, many researchers have proposed update disciplines that solve these problems in restricted but commonly occurring situations. However, these proposals rely either on garbage collectors [7, 8], termination(More)
Read-copy update is a mechanism for constructing highly scalable algorithms for accessing and modifying read-mostly data structures, while avoiding cacheline bouncing, memory contention, and deadlocks that plague highly scalable operating system implementations. In particular, code that performs read-only accesses may be written without any locks, atomic(More)
Read-copy update (RCU) is a synchronization technique that often replaces reader-writer locking because RCU's read-side primitives are both wait-free and an order of magnitude faster than uncontended locking. Although RCU updates are relatively heavy weight, the importance of read-side performance is increasing as computing systems become more responsive to(More)
The performance of synchronization instructions on shared memory multiprocessors (SMMP) has declined dramatically compared to the performance of simple instructions. As a result, operating system developers for SMMPs have sought out synchronization algorithms that avoid using these instructions, especially in commonly executed paths. One such algorithm that(More)
Fairness queuing has recently been proposed as an eeective way to insulate users of large computer communication datagram networks from congestion caused by the activities of other (possibly ill-behaved) users. Unfortunately , fair queuing as proposed by Shenker et al. DKS89] requires that each conversation z be mapped into its own queue. While there are(More)
Achieving high performance for concurrent applications on modern multiprocessors remains challenging. Many programmers avoid locking to improve performance, while others replace locks with non-blocking synchronization to protect against deadlock, priority inversion, and convoying. In both cases, dynamic data structures that avoid locking require a memory(More)