ulvis.paste.net

Paste Search Dynamic
Recent pastes
Semaphore
  1. import java.util.*;
  2. import java.lang.*;
  3. import java.io.*;
  4. import java.util.concurrent.Semaphore;   /* Counting to Binary Semaphore */
  5.  
  6. class C2B extends Semaphore
  7. {
  8.         volatile int val;
  9.         int max;
  10.         Semaphore mutex = new Semaphore(1);
  11.  
  12.         C2B(int n)
  13.         {
  14.                 super(n);
  15.                 max=super.availablePermits();
  16.         }
  17.  
  18.         public void acquire() throws interruptedexception
  19.         {
  20.  
  21.                 mutex.acquire();
  22.                 val=super.availablePermits();
  23.                 mutex.release();
  24.                 while(val!=max);
  25.                 super.acquire();
  26.  
  27.  
  28.         }
  29.  
  30.         public void release()
  31.         {
  32.  
  33.                 super.release();
  34.                 val=super.availablePermits();
  35.         }
  36. }
  37.  
  38. class Q
  39. {
  40.         int item;
  41.         Semaphore full = new Semaphore(0);
  42.         C2B empty = new C2B(10);
  43.  
  44.  
  45.         void put(int i)
  46.         {
  47.                 try
  48.                 {
  49.                         empty.acquire();
  50.                 }
  51.                 catch(interruptedexception e)
  52.                 {
  53.                         system.out.println(e);
  54.                 }
  55.                 item=i;
  56.                 system.out.println("Produced "+ i);
  57.                 full.release();
  58.         }
  59.  
  60.         void get()
  61.         {
  62.                 try
  63.                 {
  64.                         full.acquire();
  65.                 }
  66.                 catch(interruptedexception e)
  67.                 {
  68.                         system.out.println(e);
  69.                 }
  70.                 system.out.println("Consumed "+ item);
  71.                 empty.release();
  72.  
  73.         }
  74.  
  75.  
  76. }
  77.  
  78. class Producer extends thread
  79. {
  80.         Q q;
  81.         Producer(Q q)
  82.         {
  83.                 this.q=q;
  84.                 this.start();
  85.         }
  86.         public void run()
  87.         {
  88.                 //while(true)
  89.                 for(int j=0;j<5;j++)
  90.                 {
  91.                         int i= (int)(math.random()*100)+1;
  92.                         q.put(i);
  93.                 }
  94.  
  95.         }
  96. }
  97.  
  98. class Consumer extends thread
  99. {
  100.         Q q;
  101.         Consumer(Q q)
  102.         {
  103.                 this.q=q;
  104.                 this.start();
  105.         }
  106.         public void run()
  107.         {
  108.                 //while(true)
  109.                 for(int i=0;i<5;i++)
  110.                 {
  111.  
  112.                         q.get();
  113.                 }
  114.  
  115.         }       
  116. }
  117. /* Name of the class has to be "Main" only if the class is public. */
  118. class one
  119. {
  120.         public static void main (string[] args) throws java.lang.exception
  121.         {
  122.                 Q q= new Q();
  123.                 new Producer(q);
  124.                 new Consumer(q);
  125.  
  126.         }
  127. }
Parsed in 0.032 seconds