Tuesday, May 12, 2020

Reader Writer problem

Problem :

The readers-writers problem relates to an object such as a file that is shared between multiple processes. Some of these processes are readers i.e. they only want to read the data from the object and some of the processes are writers i.e. they want to write into the object.
The readers-writers problem is used to manage synchronization so that there are no problems with the object data. For example - If two readers access the object at the same time there is no problem. However if two writers or a reader and writer access the object at the same time, there may be problems.
To solve this situation, a writer should get exclusive access to an object i.e. when a writer is accessing the object, no reader or writer may access it. However, multiple readers can access the object at the same time.

Code : 

import threading as thread import random global x #Shared Data x = 0 lock = thread.Lock() #Lock for synchronising access def Reader(): global x print('Reader is Reading!') lock.acquire() #Acquire the lock before Reading (mutex approach) print('Shared Data:', x) lock.release() #Release the lock after Reading print() def Writer(): global x print('Writer is Writing!') lock.acquire() #Acquire the lock before Writing x += 1 #Write on the shared memory print('Writer is Releasing the lock!') lock.release() #Release the lock after Writing print() if __name__ == '__main__': for i in range(0, 10): randomNumber = random.randint(0, 100) #Generate a Random number between 0 to 100 if(randomNumber > 50): Thread1 = thread.Thread(target = Reader) Thread1.start() else: Thread2 = thread.Thread(target = Writer) Thread2.start() Thread1.join() Thread2.join() # print(x)

Output:



Tower of Hanoi problem

Problem:


Tower of Hanoi is a mathematical puzzle where we have three rods and n disks. The objective of the puzzle is to move the entire stack to another rod, obeying the following simple rules:

1) Only one disk can be moved at a time.

2) Each move consists of taking the upper disk from one of the stacks and placing it on top of another stack i.e. a disk can only be moved if it is the uppermost disk on a stack.

3) No disk may be placed on top of a smaller disk.

Code :

#include <stdio.h>
  
// C recursive function to solve tower of hanoi puzzle
void towerOfHanoi(int n, char from_rod, char to_rod, char aux_rod)
{
    if (n == 1)
    {
        printf("\n Move disk 1 from rod %c to rod %c", from_rod, to_rod);
        return;
    }
    towerOfHanoi(n-1, from_rod, aux_rod, to_rod);
    printf("\n Move disk %d from rod %c to rod %c", n, from_rod, to_rod);
    towerOfHanoi(n-1, aux_rod, to_rod, from_rod);
}
  
int main()
{
    int n = 4; // Number of disks
    towerOfHanoi(n, \'A\', \'C\', \'B\');  // A, B and C are names of rods
    return 0;
}

Output:

 Move disk 1 from rod A to rod B
 Move disk 2 from rod A to rod C
 Move disk 1 from rod B to rod C
 Move disk 3 from rod A to rod B
 Move disk 1 from rod C to rod A
 Move disk 2 from rod C to rod B
 Move disk 1 from rod A to rod B
 Move disk 4 from rod A to rod C
 Move disk 1 from rod B to rod C
 Move disk 2 from rod B to rod A
 Move disk 1 from rod C to rod A
 Move disk 3 from rod B to rod C
 Move disk 1 from rod A to rod B
 Move disk 2 from rod A to rod C
 Move disk 1 from rod B to rod C