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:

    I think that a young state, like a young virgin, should modestly stay at home, and wait the application of suitors for an alliance with her; and not run about offering her amity to all the world; and hazarding their refusal.... Our virgin is a jolly one; and tho at present not very rich, will in time be a great fortune, and where she has a favorable predisposition, it seems to me well worth cultivating.
    Benjamin Franklin (1706–1790)

    So long as State constitutions say that all may vote when twenty-one, save idiots, lunatics, convicts and women, you are brought down politically to the level of those others disfranchised.
    Susan B. Anthony (1820–1906)

    Productive collaborations between family and school, therefore, will demand that parents and teachers recognize the critical importance of each other’s participation in the life of the child. This mutuality of knowledge, understanding, and empathy comes not only with a recognition of the child as the central purpose for the collaboration but also with a recognition of the need to maintain roles and relationships with children that are comprehensive, dynamic, and differentiated.
    Sara Lawrence Lightfoot (20th century)

    ... many of the things which we deplore, the prevalence of tuberculosis, the mounting record of crime in certain sections of the country, are not due just to lack of education and to physical differences, but are due in great part to the basic fact of segregation which we have set up in this country and which warps and twists the lives not only of our Negro population, but sometimes of foreign born or even of religious groups.
    Eleanor Roosevelt (1884–1962)