1. Engineering
  2. Computer Science
  3. q write the semaphore and mutex in a correct way...

Question: q write the semaphore and mutex in a correct way...

Question details

Q) Write the semaphore and mutex in a correct way. // ***** and // **** parts should be filled!

1) Take the operation_number & tail_length from the user.
2) Use the start() function to start whole functions
3) End the program

While programs are working, they follow these steps:
- Ask mutex
- When you get the permission,
If the counter variable is equal to tail_length,
- Sleep 1 second
- Take off the mutex
- Return to the beginning again
If the counter variable is smaller than tail_length,
- Increase the counter variable by 1
- Take off the mutex
4) Print screen the action performing
5) Ask mutex

6) When you get the permission, decrease the counter variable by 1.
7) Take off the mutex
8) Finish

-----------------------------------------------------------------------------------------------------------------------------------------------------

// **** (change here with your own package information)
// package uis;
// ****

import java.util.concurrent.Semaphore;
import java.util.Scanner;

public class windows
{
  
   static Semaphore semaphore = new Semaphore(1);
   static int counter = 0;
  
  
   static int tail_length;
   static int operation_number;

   static class operation extends Thread {

       String name = "";

       public void create_name(String s)
       {
           name = s;
       }
      
       public void run() {

           try {
               System.out.println(name + " : trying to get permission");
              
              
               while(true)
               {  
                   // **** (ask mutex)
                  
                   // ****
                  
                  
                   if(counter < tail_length)
                   {
                       // (if true, increase by 1)
                       // ****
                      
                       // ****
                      
                       // (after you increase the counter, take off the mutex and let the other process join the queue)
                      
                       // (take off the mutex)
                       // ****
                      
                       // ****
                      
                       break;
                   }else   //(if counter = tail_length,)
                   {
                       // (take off the mutex)
                       // ****
                      
                       // ****
                      
                       // (sleep 1 second)
                       // ****
                      
                       // ****
                      
                       // (Redone the whole process)                  
                   }                      
                  
               }
              
               // (After getting permission)
               System.out.println(name + " : we get the permission");

               try {

                   // let the operation indicates that action is done.
                   for (int i = 1; i <= 3; i++)
                   {

                       System.out.println(name + " : processing " + i);

                       // sleep 1 second
                       Thread.sleep(1000);
                   }

               } finally {

                  
                   System.out.println(name + " : take off the permission...");
                  
                   // Since we are out from the tail, we need to decrease counter.
                  
                   // Ask mutex
                   // ****
                  
                   // ****
                  
                   // decrease counter by 1
                   // ****
                  
                   // ****
                  
                   // take off the mutex
                   semaphore.release();                  
                  

               }

           } catch (InterruptedException e) {

               e.printStackTrace();

           }

       }

   }

   public static void main(String[] args)
   {
      
       System.out.println("Enter the tail length: ");
       Scanner in = new Scanner(System.in);
      
       // ****
       Take 'comment' here by using Scanner that is taken by the user to show how much tail length is given by the operating system.
       // ****
      
       System.out.println("Enter the total operation number: ");
      
       // ****
       By using the Scanner, ask for the total operation number by the user.
       // ****
      
      
       // define the string for operation_list to hold the operations
       // ****
      
       // ****
      
      
       // ****
       in for loop, define the every object in operation_list as "new operation()"
       // ****
      
       // in the "operation_list" create the "create_name" function for every operation in for loop in order. "
      
       for(int i = 0; i < operation_number; i++)
       {
           System.out.println((i+1) + ". Enter the name of person: ");
          
           // At that point, by using "in.next()" function to take string, create name of the i th operation in the list.
           // ****
          
           // ****
       }
         
      
       // in the for loop, for all the operation thread, use "start()" function to start.
       // ****
      
       // ****

   }
  
  
  
  
  
  

}

Solution by an expert tutor
Blurred Solution
This question has been solved
Subscribe to see this solution