Lifecycle management of threads #29

Merged
harraiken merged 240 commits from threads into master 2026-09-07 13:45:09 +02:00
2 changed files with 38 additions and 0 deletions
Showing only changes of commit d10b2cc2a1 - Show all commits

View File

@@ -52,6 +52,9 @@ namespace RTL
STATIC XTFASTCALL LONG_PTR CompareExchange64(IN PLONG_PTR Address, STATIC XTFASTCALL LONG_PTR CompareExchange64(IN PLONG_PTR Address,
IN LONG_PTR Comperand, IN LONG_PTR Comperand,
IN LONG_PTR Exchange); IN LONG_PTR Exchange);
STATIC XTFASTCALL DOUBLE_ULONG_PTR CompareExchange128(IN PDOUBLE_ULONG_PTR Address,
IN DOUBLE_ULONG_PTR Comperand,
IN DOUBLE_ULONG_PTR Exchange);
STATIC XTFASTCALL PVOID CompareExchangePointer(IN PVOID *Address, STATIC XTFASTCALL PVOID CompareExchangePointer(IN PVOID *Address,
IN PVOID Comperand, IN PVOID Comperand,
IN PVOID Exchange); IN PVOID Exchange);

View File

@@ -341,6 +341,41 @@ RTL::Atomic::CompareExchange64(IN PLONG_PTR Address,
return __sync_val_compare_and_swap(Address, Comperand, Exchange); return __sync_val_compare_and_swap(Address, Comperand, Exchange);
} }
/**
* Performs an atomic compare-exchange operation on the 64-bit or 128-bit value depending on architecture.
*
* @param Address
* Supplies the address of the value to compare and potentially exchange.
*
* @param Comperand
* Supplies the value to compare against.
*
* @param Exchange
* Supplies the value to write if the comparison returns equality.
*
* @return This routine returns the original value at the given address.
*
* @since XT 1.0
*/
XTFASTCALL
DOUBLE_ULONG_PTR
RTL::Atomic::CompareExchange128(IN PDOUBLE_ULONG_PTR Address,
IN DOUBLE_ULONG_PTR Comperand,
IN DOUBLE_ULONG_PTR Exchange)
{
DOUBLE_ULONG_PTR Value;
/* Make a local copy of the comperand */
Value = Comperand;
/* Perform an atomic compare-exchange operation */
__atomic_compare_exchange((VOLATILE PDOUBLE_ULONG_PTR)Address, &Value, &Exchange,
FALSE, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST);
/* Return value */
return Value;
}
/** /**
* Performs atomically compare exchange operation. * Performs atomically compare exchange operation.
* *