|
DPDK 25.03.0
|
#include <rte_lcore.h>#include <rte_common.h>#include <rte_pause.h>#include <rte_branch_prediction.h>#include <rte_stdatomic.h>Go to the source code of this file.
Data Structures | |
| struct | rte_mcslock |
Typedefs | |
| typedef struct rte_mcslock | rte_mcslock_t |
Functions | |
| static void | rte_mcslock_lock (1(rte_mcslock_t *) *msl, rte_mcslock_t *me) |
| static void | rte_mcslock_unlock (1(rte_mcslock_t *) *msl, 1(rte_mcslock_t *) me) |
| static int | rte_mcslock_trylock (1(rte_mcslock_t *) *msl, rte_mcslock_t *me) |
| static int | rte_mcslock_is_locked (1(rte_mcslock_t *) msl) |
RTE MCS lock
This file defines the main data structure and APIs for MCS queued lock.
The MCS lock (proposed by John M. Mellor-Crummey and Michael L. Scott) provides scalability by spinning on a CPU/thread local variable which avoids expensive cache bouncings. It provides fairness by maintaining a list of acquirers and passing the lock to each CPU/thread in the order they acquired the lock.
Definition in file rte_mcslock.h.
| typedef struct rte_mcslock rte_mcslock_t |
The rte_mcslock_t type.
|
inlinestatic |
Take the MCS lock.
| msl | A pointer to the pointer of a MCS lock. When the lock is initialized or declared, the msl pointer should be set to NULL. |
| me | A pointer to a new node of MCS lock. Each CPU/thread acquiring the lock should use its 'own node'. |
Definition at line 52 of file rte_mcslock.h.
|
inlinestatic |
Release the MCS lock.
| msl | A pointer to the pointer of a MCS lock. |
| me | A pointer to the node of MCS lock passed in rte_mcslock_lock. |
Definition at line 104 of file rte_mcslock.h.
|
inlinestatic |
Try to take the lock.
| msl | A pointer to the pointer of a MCS lock. |
| me | A pointer to a new node of MCS lock. |
Definition at line 144 of file rte_mcslock.h.
|
inlinestatic |
Test if the lock is taken.
| msl | A pointer to a MCS lock node. |
Definition at line 171 of file rte_mcslock.h.