0% found this document useful (0 votes)
5 views

Critical Section in Synchronization

Critical Section in Synchronization

Uploaded by

pingalesai9
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
5 views

Critical Section in Synchronization

Critical Section in Synchronization

Uploaded by

pingalesai9
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 3

Search...

Aptitude Engineering Mathematics Discrete Mathematics Operating System DBMS Sign In

Critical Section in Synchronization


Last Updated : 14 Jan, 2025

A critical section is a part of a program where shared resources like


memory or files are accessed by multiple processes or threads. To avoid
issues like data inconsistency or race conditions, synchronization
techniques ensure that only one process or thread uses the critical section
at a time.

The critical section contains shared variables or resources that need to


be synchronized to maintain the consistency of data variables.
In simple terms, a critical section is a group of instructions/statements or
regions of code that need to be executed atomically, such as accessing
a resource (file, input or output port, global data, etc.)
In concurrent programming, if one process tries to change the value of
shared data at the same time as another thread tries to read the value
(i.e., data race across threads), the result is unpredictable. The access to
such shared variables (shared memory, shared files, shared port, etc.) is
to be synchronized.

Few programming languages have built-in support for synchronization. It


is critical to understand the importance of race conditions while writing
kernel-mode programming (a device driver, kernel thread, etc.) since the
programmer can directly access and modify kernel data structures

Although there are some properties that should be followed if any code
in the critical section

1. Mutual Exclusion: If process Pi is executing in its critical section, then


no other processes can be executing in their critical sections.

Open In App
2. Progress: If no process is executing in its critical section and some
processes wish to enter their critical sections, then only those processes
that are not executing in their remainder sections can participate in
deciding which will enter its critical section next, and this selection
cannot be postponed indefinitely.
3. Bounded Waiting: There exists a bound, or limit, on the number of
times that other processes are allowed to enter their critical sections
after a process has made a request to enter its critical section and
before that request is granted.

Two general approaches are used to handle critical sections:

1. Preemptive kernels: A preemptive kernel allows a process to be


preempted while it is running in kernel mode.
2. Non preemptive kernels: A non-preemptive kernel does not allow a
process running in kernel mode to be preempted. A kernel-mode
process will run until it exists in kernel mode, blocks, or voluntarily
yields control of the CPU. A non-preemptive kernel is essentially free
from race conditions on kernel data structures, as only one process is
active in the kernel at a time.

Critical Section Problem


The use of critical sections in a program can cause a number of issues,
including:

Deadlock: When two or more threads or processes wait for each other
to release a critical section, it can result in a deadlock situation in which
none of the threads or processes can move. Deadlocks can be difficult
to detect and resolve, and they can have a significant impact on a
program's performance and reliability.

Starvation: When a thread or process is repeatedly prevented from


entering a critical section, it can result in starvation, in which the thread
or process is unable to progress. This can happen if the critical section
Open In App
is held for an unusually long period of time, or if a high-priority thread
or process is always given priority when entering the critical section.

Overhead: When using critical sections, threads or processes must


acquire and release locks or semaphores, which can take time and
resources. This may reduce the program's overall performance.

Critical section

It could be visualized using the pseudo-code below -

do{
flag=1;
while(flag); // (entry section)
// critical section
if (!flag)
// remainder section
} while(true);

Solution to Critical Section Problem


A simple solution to the critical section can be thought of as shown below,

acquireLock();
Process Critical Section
releaseLock(); Open In App

You might also like