Critical Section - Application Level Critical Sections

Application Level Critical Sections

Application-level critical sections reside in the memory range of the process and are usually modifiable by the process itself. This is called a user-space object because the program run by the user (as opposed to the kernel) can modify and interact with the object. However, the functions called may jump to kernel-space code to register the user-space object with the kernel.

Example Code For Critical Sections with POSIX pthread library

/* Sample C/C++, Unix/Linux */ #include /* This is the critical section object (statically allocated). */ static pthread_mutex_t cs_mutex = PTHREAD_MUTEX_INITIALIZER; void f { /* Enter the critical section -- other threads are locked out */ pthread_mutex_lock( &cs_mutex ); /* Do some thread-safe processing! */ /*Leave the critical section -- other threads can now pthread_mutex_lock */ pthread_mutex_unlock( &cs_mutex ); } int main { f; return 0; }

Example Code For Critical Sections with Win32 API

/* Sample C/C++, Windows, link to kernel32.dll */ #include static CRITICAL_SECTION cs; /* This is the critical section object -- once initialized, it cannot be moved in memory */ /* If you program in OOP, declare this as a non-static member in your class */ void f { /* Enter the critical section -- other threads are locked out */ EnterCriticalSection(&cs); /* Do some thread-safe processing! */ /* Leave the critical section -- other threads can now EnterCriticalSection */ LeaveCriticalSection(&cs); } int main { /* Initialize the critical section before entering multi-threaded context. */ InitializeCriticalSection(&cs); f; /* Release system object when all finished -- usually at the end of the cleanup code */ DeleteCriticalSection(&cs); return 0; }

Note that on Windows NT (not 9x/ME), the function TryEnterCriticalSection can be used to attempt to enter the critical section. This function returns immediately so that the thread can do other things if it fails to enter the critical section (usually due to another thread having locked it). With the pthreads library, the equivalent function is pthread_mutex_trylock. Note that the use of a CriticalSection is not the same as a Win32 Mutex, which is an object used for inter-process synchronization. A Win32 CriticalSection is for intra-process synchronization (and is much faster regarding lock times), however it cannot be shared across processes.

Read more about this topic:  Critical Section

Famous quotes containing the words application, level, critical and/or sections:

    Great abilites are not requisite for an Historian; for in historical composition, all the greatest powers of the human mind are quiescent. He has facts ready to his hand; so there is no exercise of invention. Imagination is not required in any degree; only about as much as is used in the lowest kinds of poetry. Some penetration, accuracy, and colouring, will fit a man for the task, if he can give the application which is necessary.
    Samuel Johnson (1709–1784)

    There are old heads in the world who cannot help me by their example or advice to live worthily and satisfactorily to myself; but I believe that it is in my power to elevate myself this very hour above the common level of my life.
    Henry David Thoreau (1817–1862)

    If our entertainment culture seems debased and unsatisfying, the hope is that our children will create something of greater worth. But it is as if we expect them to create out of nothing, like God, for the encouragement of creativity is in the popular mind, opposed to instruction. There is little sense that creativity must grow out of tradition, even when it is critical of that tradition, and children are scarcely being given the materials on which their creativity could work
    C. John Sommerville (20th century)

    Childhood lasts all through life. It returns to animate broad sections of adult life.... Poets will help us to find this living childhood within us, this permanent, durable immobile world.
    Gaston Bachelard (1884–1962)