Thread Synchronization Mechanism for Priority-Correct Locking

Resolve Bottlenecks,
Find Innovative Solutions
Generate Solutions

Solution Overview

Problem

Existing multi-threaded systems face challenges in implementing fast locking mechanisms across various operating systems, particularly those that do not allow thread ownership of mutexes to be assigned, leading to inefficiencies and potential resource starvation due to lack of priority correctness and memory constraints.

Innovation Solution

The implementation of a fast locking mechanism that uses operating system mutexes for thread boosting and pre-allocates memory sections to ensure low-memory safety, allowing for efficient locking even on platforms without thread ownership assignment capabilities, by employing a boost record system to manage lock contention and priority inheritance.

Engineering Contradictions & Design Principles

VSEngineering Contradiction Analysis

1Reliability

If a heavy-weight lock data structure and OS mutex are created for every lock request, then thread synchronization reliability is ensured, but system resource overhead and memory consumption increase significantly

Engineering Contradiction:
Improvethread synchronization reliabilityVSAvoidmemory consumption
Core Design Contradiction:
ReliabilityVSQuantity of substance

Solution Approach 1:

The system pre-allocates a light-weight lock data structure before actual locking is needed. This preliminary structure uses minimal memory and allows fast locking operations. Only when contention is detected does the system transition to creating the full heavy-weight lock with OS mutex, thus avoiding unnecessary memory consumption while maintaining synchronization reliability.

Inventive Principle:
Principle #10Preliminary action

Solution Approach 2:

The locking mechanism is segmented into two distinct phases: a light-weight phase using minimal data structures for contention-free locking, and a heavy-weight phase using full OS mutexes only when contention occurs. This segmentation allows the system to optimize for the common case of no contention while still providing reliable synchronization when needed.

Inventive Principle:
Principle #1Segmentation

2Quantity of substance

If a light-weight lock data structure is used to reduce overhead, then memory consumption and locking overhead are reduced, but the ability to ensure priority correctness and prevent resource starvation is compromised

Engineering Contradiction:
Improvememory consumptionVSAvoidpriority correctness
Core Design Contradiction:
Quantity of substanceVSReliability

Solution Approach 1:

The light-weight lock data structure is prepared in advance with all necessary fields and structures to support priority inheritance, but actual priority management is only activated when contention is detected. This preliminary preparation allows the system to maintain priority correctness capability without the ongoing overhead of full priority management mechanisms.

Inventive Principle:
Principle #10Preliminary action

Solution Approach 2:

The locking mechanism dynamically transitions between light-weight and heavy-weight modes based on contention detection. When contention is detected, the system activates full priority management and OS mutex mechanisms. When no contention occurs, the system operates in lightweight mode with minimal overhead. This dynamic adaptation resolves the contradiction by providing priority correctness only when necessary.

Inventive Principle:
Principle #15Dynamics

3Productivity

If OS mutex ownership is assigned to the requesting thread, then fast locking is achieved, but compatibility with operating systems that do not support this feature is lost

Engineering Contradiction:
Improvelocking speedVSAvoidOS platform compatibility
Core Design Contradiction:
ProductivityVSAdaptability or versatility

Solution Approach 1:

Instead of having the requesting thread directly acquire mutex ownership (which fails on some OS platforms), the system inverts the approach: the currently running thread that holds the lock is identified, and its priority is boosted to match the requesting thread's priority. This inversion allows priority inheritance to work on all OS platforms regardless of whether they support direct mutex ownership assignment.

Inventive Principle:
Principle #13The other way round (Inversion)

Solution Approach 2:

The system introduces a priority boosting mechanism as an intermediary between the light-weight lock data structure and the OS mutex. This intermediary layer handles priority management in a platform-independent manner, allowing the system to achieve fast locking on platforms that support it while maintaining compatibility with platforms that do not.

Inventive Principle:
Principle #24Intermediary (Mediator)

4Adaptability or versatility

If memory is allocated dynamically during locking operations, then flexibility is maintained, but system stability is compromised in low-memory states

Engineering Contradiction:
Improvememory allocation flexibilityVSAvoidsystem stability
Core Design Contradiction:
Adaptability or versatilityVSReliability

Solution Approach 1:

The light-weight lock data structure is pre-allocated with a fixed size and all necessary fields before the locking operation begins. This preliminary allocation ensures that the critical path of the locking operation does not require additional memory allocations, preventing allocation failures and ensuring system stability even in low-memory states. Flexibility is maintained for non-critical operations that occur after successful locking.

Inventive Principle:
Principle #10Preliminary action

Data Source

PatentUS7886300B1Mechanism for implementing thread synchronization in a priority-correct, low-memory safe manner
Publication Date: 2011.02.08 ORACLE AMERICAN INC
  • US7886300B1 patent drawing
  • US7886300B1 patent drawing
  • US7886300B1 patent drawing

AI summary

A mechanism is disclosed for implementing fast locking in a multi-threaded system. This mechanism enables fast locking to be performed even on an operating system platform that does not allow one thread to assign ownership of a lock on a mutex to another thread. In addition, the mechanism performs locking in a manner that ensures priority correctness and is low-memory safe. In one implementation, the priority correctness is achieved by using operating system mutexes to implement locking, and the low-memory safe aspect is achieved by pre-allocating a memory section to each thread. This pre-allocated memory section ensures that a thread will have sufficient memory to obtain a lock, even when a system is in a low-memory state. With this mechanism, it is possible to implement locking in a safe and efficient manner.