Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

import java.util.concurrent.Semaphore; class Buffer { private int data; private Semaphore mutex; private Semaphore empty; private Semaphore full; public Buffer ( ) { / / Initialize

import java.util.concurrent.Semaphore;
class Buffer {
private int data;
private Semaphore mutex;
private Semaphore empty;
private Semaphore full;
public Buffer(){
// Initialize semaphores
mutex = new Semaphore(1); // Binary semaphore for mutual exclusion
empty = new Semaphore(1); // Semaphore to track empty slots in buffer
full = new Semaphore(0); // Semaphore to track filled slots in buffer
}
public void produce(int newData) throws InterruptedException {
empty.acquire(); // Wait for an empty slot
mutex.acquire(); // Acquire mutex for critical section
// Add data to buffer
data = newData;
System.out.println("Produced: "+ newData);
mutex.release(); // Release mutex
full.release(); // Signal that buffer is full
}
public int consume() throws InterruptedException {
full.acquire(); // Wait for a full slot
mutex.acquire(); // Acquire mutex for critical section
// Consume data from buffer
int consumedData = data;
System.out.println("Consumed: "+ consumedData);
mutex.release(); // Release mutex
empty.release(); // Signal that buffer is empty
return consumedData;
}
}
class Producer implements Runnable {
private Buffer buffer;
public Producer(Buffer buffer){
this.buffer = buffer;
}
public void run(){
try {
for (int i =0; i <10; i++){
buffer.produce(i);
Thread.sleep(500); // Simulate production time
}
} catch (InterruptedException e){
e.printStackTrace();
}
}
}
class Consumer implements Runnable {
private Buffer buffer;
public Consumer(Buffer buffer){
this.buffer = buffer;
}
public void run(){
try {
for (int i =0; i <10; i++){
buffer.consume();
Thread.sleep(1000); // Simulate consumption time
}
} catch (InterruptedException e){
e.printStackTrace();
}
}
}
public class Main {
public static void main(String[] args){
Buffer buffer = new Buffer();
Thread producerThread = new Thread(new Producer(buffer));
Thread consumerThread = new Thread(new Consumer(buffer));
producerThread.start();
consumerThread.start();
}
} note each one in the code of tehese point 1- race condition 2-semaphore 3-operation on shared object using ,buffer

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Database Design And SQL For DB2

Authors: James Cooper

1st Edition

1583473572, 978-1583473573

Students also viewed these Databases questions