C- Language, Tutorials

Process Synchronization (Part 1)

We can divide processes in two Categories

1) Co-operative Processes

2) Independent Processes

Co-operative processes are those where the execution of one process affects or affected by other process and if they are not dependent than they are independent processes.

In this tutorial we will study :-

1) problems

2) Conditions to achieve synchronization

3) Solutions to achieve synchronization (which will cover both wrong & right solutions)

Lets Start with Problems which we faced during implementing  Co-operative processes

Producer- Consumer Problem :

The problem describes two processes, the producer and the consumer, who share a common, fixed-size buffer used as a queue. The producer’s job is to generate a piece of data, put it into the buffer and start again. At the same time, the consumer is consuming the data (i.e., removing it from the buffer) one piece at a time. The problem is to make sure that the producer won’t try to add data into the buffer if it’s full and that the consumer won’t try to remove data from an empty buffer.

Consider the Following Program

Producer Code

Int Count =0;

Void producer(void){

int temp;





in=(in + 1)mod n ;




Consumer Code

void consumer(void){

int itemc;





out=(out+1)mod n;


process.item(item c);



can you find any error in the above programs?

when we see these programs individually than these programs works fine but if both of these programs have to work on same data , same resources than they fail to achieve synchronization  which results in inconsistency , loss of data and sometimes can cause DEADLOCK.

Now before continuing to  the next Topic lets know some important terms

Critical Section :-  The portion of program where shared resource or the shared variables is placed

Non Critical Section :- The portion of program which is independent to respective processes

Race Condition :- The condition in which the output of the process depends on execution sequence of statements

Conditions which are important to achieve Synchronization :

1) Mutual Exclusion :- No two processes may be simultaneously present inside the Critical Section at any point of time.

2) Progress :- No process running outside the critical section should block the other interested processes from entring into critical section when critical section is free.

3) Bounded waiting :- No process should have to wait forever to enter into critical section .i.e. their should  be a bound on getting chance to enter into critical section .

(note : – if any solution which is not following bounded waiting than their is a possibility of starvation.)

4) No assumption related to hardware of the process or speed should be taken .

Continued …


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s