DosCreateSpinLock: Difference between revisions
Appearance
mNo edit summary |
No edit summary |
||
(7 intermediate revisions by 2 users not shown) | |||
Line 2: | Line 2: | ||
==Syntax== | ==Syntax== | ||
DosCreateSpinLock (pHandle) | APIRET APIENTRY DosCreateSpinLock (PHSPINLOCK pHandle) | ||
==Parameters== | ==Parameters== | ||
Line 13: | Line 13: | ||
==Remarks== | ==Remarks== | ||
DosCreateSpinLock returns a handle to a spin lock that is allocated in kernel data space. The handle is to be used on subsequent spin lock function calls and DevHlps. | |||
Do not call any API Function while you are holding a spinlock. | |||
==Example Code== | ==Example Code== | ||
Line 22: | Line 23: | ||
typedef HSPINLOCK FAR *PHSPINLOCK; | typedef HSPINLOCK FAR *PHSPINLOCK; | ||
APIRET APIENTRY DosCreateSpinLock(PHSPINLOCK pHandle); | APIRET APIENTRY DosCreateSpinLock(PHSPINLOCK pHandle); | ||
VOID APIENTRY DosAcquireSpinLock(HSPINLOCK Handle); | |||
VOID APIENTRY DosReleaseSpinLock(HSPINLOCK Handle); | |||
APIRET APIENTRY DosFreeSpinLock(HSPINLOCK Handle); | APIRET APIENTRY DosFreeSpinLock(HSPINLOCK Handle); | ||
}; | }; | ||
Line 47: | Line 48: | ||
*[[DosReleaseSpinLock]] | *[[DosReleaseSpinLock]] | ||
[[Category: | [[Category:Dos]] |
Latest revision as of 10:05, 19 July 2023
Create a spinlock for multiprocessor serialisation.
Syntax
APIRET APIENTRY DosCreateSpinLock (PHSPINLOCK pHandle)
Parameters
- phandle (PHSPINLOCK)
- A pointer to the spinlock handle that can be passed to DosAcquireSpinLock to acquire a spinlock and to DosReleaseSpinLock to release the spinlock.
Returns
- ulrc (APIRET)
- 0 NO_ERROR
- 32804 ERROR_NO_MORE_HANDLES
Remarks
DosCreateSpinLock returns a handle to a spin lock that is allocated in kernel data space. The handle is to be used on subsequent spin lock function calls and DevHlps. Do not call any API Function while you are holding a spinlock.
Example Code
// OS/2 adv srv 4 SMP spinlock extern "C" { typedef ULONG HSPINLOCK; typedef HSPINLOCK FAR *PHSPINLOCK; APIRET APIENTRY DosCreateSpinLock(PHSPINLOCK pHandle); VOID APIENTRY DosAcquireSpinLock(HSPINLOCK Handle); VOID APIENTRY DosReleaseSpinLock(HSPINLOCK Handle); APIRET APIENTRY DosFreeSpinLock(HSPINLOCK Handle); }; class SpinLock { HSPINLOCK sl; public: SpinLock() { DosCreateSpinLock(&sl); } ~SpinLock() { DosFreeSpinLock(sl); } void Request() { DosAcquireSpinLock(sl); } void Release() { DosReleaseSpinLock(sl); } };