|
|
|
Location:
e32std.h
Link against: euser.lib
RCriticalSection
Supported from 5.0
A handle to a critical section.
A critical section itself is a Kernel object, and is implemented
using a semaphore. The class RCriticalSection inherits privately
from RSemaphore as a matter of implementation and this is, in
effect, equivalent to using a semaphore.
The public functions of RSemaphore are not part of the
public API of this class.
As with all handles, they should be closed after use. This class
provides the necessary Close() function, which should be called
when the handle is no longer required.
|
Defined in RCriticalSection:
Close(), CreateLocal(), IsBlocked(), RCriticalSection(), Signal(), Wait()
Inherited from RHandleBase:
Duplicate(),
Handle(),
SetHandle()
Inherited from RSemaphore:
Count(),
CreateGlobal(),
Open(),
OpenGlobal()
RCriticalSection();
Constructs the object.
The constructor exists to initialise private data within this handle; it does not create the critical section object.
TInt CreateLocal(TOwnerType aType=EOwnerProcess);
Creates a critical section and opens this handle to the critical section.
The Kernel side object representing the critical section is unnamed. This means that it is not possible to search for the critical section, which makes it local to the current process.
By default, any thread in the process can use this instance of
RCriticalSection to access the critical section. However,
specifying EOwnerThread as the parameter to this function, means
that only the creating thread can use this instance of
RCriticalSection to access the critical section; any other thread
in this process that wants to access the critical section must duplicate this
handle.
|
|
void Close();
Closes the handle to the critical section object.
As a critical section object is implemented using a semaphore, this has the effect of closing the handle to the semaphore.
void Wait();
Waits for access to the critical section.
If no other thread is in the critical section, control returns immediately and the current thread can continue into the section.
If another thread is already in the critical section, the current thread is marked as waiting (on a semaphore); the current thread is added to the end of a FIFO queue of threads maintained by this critical section.
void Signal();
Signals an exit from the critical section.
A thread calls Signal() when it exits from the
critical section. The first thread waiting on the critical section’s
queue of threads is removed from that queue and, provided that it is not
suspended for any other reason, is marked as ready to run. That thread will,
therefore, be the next to proceed into the critical section.
TBool IsBlocked() const;
Tests whether the critical section is occupied by another thread.
|