Our Services

Get 15% Discount on your First Order

[rank_math_breadcrumb]

Mutex locks and semaphores, as discussed in class, are different techniques to solve the race condition and to ensure an efficient synchronization between cooperating threads and processes. you wil

Mutex  locks and semaphores, as discussed in class, are different techniques to  solve the race condition and to ensure an efficient synchronization  between cooperating threads and processes. you will use semaphores to  solve a number of synchronization problems between cooperating threads.

important to note that:

•  Semaphore, in literature, uses wait() and signal(). However, in the  standard library of Java, these functions are acquire() and release()  respectively. The same functionalities but with different names.

In  the first question, the deposit and withdraw functions share a bank  account to add certain amount or subtract certain amount from the  balance, respectively. 

Use semaphore(s) to implement the synchronization.

Implent the following to the code, 

1. Implement the deposit functionality method

 Deposit the input amount to the balance only if the current balance is less than 2000$

 Deposit  doesn’t wait until this condition is true (If the condition is false,  skip adding the amount), thus use if statements rather than waiting  while loops

 Call the displayStatus() function after you deposit the amount and before release the lock

2. Implement the withdraw functionality, method

 Withdraw the input amount from the balance only if the current balance is greater than or equal to input amount

 Withdraw  doesn’t wait until this condition is true (if the condition is false,  skip withdrawing the amount), thus use if statements rather than waiting  while  loops

 Call the displayStatus() function after you remove the amount and before release the lock

//Question1_WithdrawDeposit.java file

package Threads_Synchronization;

import java.util.concurrent.Semaphore;

import java.util.concurrent.locks.Lock;

import java.util.concurrent.locks.ReentrantLock;

public class Question1_WithdrawDeposit {

/*

* In this question use semaphore(s) to enable process synchronization

*

* Thread 1 and thread 2 (in the main function) share a single bank account (initial balance of 1000$).

* thread 1 can deposit certain input amount to the balance only if the current balance is less than 2000$

*  thread 2 can withdraw certain input amount from the balance only if the  current balance is greater than or equal to the input amount.

*

*/

// shared resources between thread 1 and thread 2 are:

public static int balance = 1000; //the initial value of the account’s balance

//DONOT CHANGE THIS VARIABLE

// add below any further resources you think the deposit and withdraw threads/functions must share

//——————————————–end of shared resources section

// this function simply displays the current balance of the shared account and which thread made the call

// DONOT CHANGE THIS FUNCTION

public static void displayStatus() {

if(Thread.currentThread().getName().equals(“withdraw”))

System.out.println(“The  withdraw function successfully took the amount and the current value of  the account’s balance is :”+ balance + “$”);

else

System.out.println(“The  deposit function successfully added the amount and the current value of  the account’s balance is :”+ balance + “$”);

}

// this function accepts an input integer amount value to deposit into the shared account

public static void Deposit(int amount){

try {

System.out.println(“The deposit function is trying to add “+ amount +”$ to the shared balance”+ balance + “$”);

//IMPLEMENT HERE the deposit functionality,

// Deposit the input amount to the balance only if the current balance is less than 2000$

//  Deposit doesn’t wait until this condition is true (If the condition is  false, skip adding the amount), thus use if statements rather than  waiting while loops

// Call the displayStatus() function after you deposit the amount and before release the lock

// Implement the deposit functionality, as detailed above, in the area below

//——————————————–end of Deposit function

} catch (Exception e) {

System.out.println(“Problem with the deposite function “+e.toString());

}

}

// this function accepts an input integer amount value to withdraw from the shared account

public static void Withdraw(int amount){

try {

System.out.println(“The withdraw is trying to remove “+ amount +”$ from the shared balance”+ balance + “$”);

//IMPLEMENT HERE the withdraw functionality,

// withdraw the input amount from the balance only if the current balance is greater than or equal to input amount

//  Withdraw doesn’t wait until this condition is true (if the condition is  false, skip withdrawing the amount), thus use if statements rather than  waiting while loops

// Call the displayStatus() function after you remove the amount and before release the lock

// Implement the withdraw functionality, as detailed above, in the area below

//——————————————–end of Withdraw function

} catch (Exception e) {

System.out.println(“Problem with the withdraw function “+e.toString());

}

}

// this is the main function

// DONOT CHANGE THIS SECTION

public static void main(String[] args) {

//create thread 1 to run function 1

Thread thread1 = new Thread(new Runnable() {

@Override

public void run() {

while(true) {

try {

Deposit(200 + (int)(Math.random() * 1000)); //random value between 200 and 1000$

Thread.sleep(200 + (int)(Math.random() * 500)); //random delay between 200 and 500

} catch (Exception e) {

System.out.println(“Problem with thread 1 “+e.toString());

}

}

}

});

//create thread 2 to run function 2

Thread thread2 = new Thread(new Runnable() {

@Override

public void run() {

while(true) {

try {

Withdraw(200 + (int)(Math.random() * 1000)); //random value between 200 and 1000$

Thread.sleep(200 + (int)(Math.random() * 500)); //random delay between 200 and 500

} catch (Exception e) {

System.out.println(“Problem with thread 2 “+e.toString());

}

}

}

});

//ask the threads to start running

thread1.setName(“deposit”);

thread1.start();

thread2.setName(“withdraw”);

thread2.start();

}

}

Share This Post

Email
WhatsApp
Facebook
Twitter
LinkedIn
Pinterest
Reddit

Order a Similar Paper and get 15% Discount on your First Order

Related Questions

NOTICE TO ACADEMIC WRITERS To all writers currently working on Studydaddy.com, Over time, many writers have expressed concerns about high commission deductions, lack of transparency, and poor communic

NOTICE TO ACADEMIC WRITERS To all writers currently working on Studydaddy.com, Over time, many writers have expressed concerns about high commission deductions, lack of transparency, and poor communication on certain academic platforms. These challenges make it difficult for writers to grow, earn fairly, and work in a supportive environment. In

️ WRITER WARNING & OPPORTUNITY NOTICE Attention Academic Writers Before continuing to invest your time and effort on Studydaddy.com, be aware that many writers report serious issues including: Ext

️ WRITER WARNING & OPPORTUNITY NOTICE Attention Academic Writers Before continuing to invest your time and effort on Studydaddy.com, be aware that many writers report serious issues including: Extremely high commission deductions per order Delayed or unclear payments Messages being ignored, muted, or blocked when payment concerns are raised A

Studydaddy Critics You all noticed that the site’s support team has basically ghosted everyone. No replies to tickets, no fixing complaints, no refunds, no dispatching payments straight radio silence.

Studydaddy Critics You all noticed that the site’s support team has basically ghosted everyone. No replies to tickets, no fixing complaints, no refunds, no dispatching payments straight radio silence. So yeah, we got fed up and threw this dumb little script. It just keeps posting this same question after approximately

Studydaddy Critics You all noticed that the site’s support team has basically ghosted everyone. No replies to tickets, no fixing complaints, no refunds, no dispatching payments straight radio silence.

Studydaddy Critics You all noticed that the site’s support team has basically ghosted everyone. No replies to tickets, no fixing complaints, no refunds, no dispatching payments straight radio silence. So yeah, we got fed up and threw this dumb little script. It just keeps posting this same question after approximately

Please follow the steps provide in unt_fibonacci_assignment.pdfDownload unt_fibonacci_assignment.pdf This assignment is designed to show one difference between higher level language (python ) vs lowe

Please follow the steps provide in  unt_fibonacci_assignment.pdfDownload unt_fibonacci_assignment.pdf This assignment is designed to show one difference between higher level language (python ) vs lower level language (c) Please test the code on cell machine : CELL18-CSE.ENG.UNT.EDU Have fun and enjoy coding, thinking and learning

Please follow the steps provide in unt_fibonacci_assignment.pdfDownload unt_fibonacci_assignment.pdf This assignment is designed to show one difference between higher level language (python ) vs lowe

Please follow the steps provide in  unt_fibonacci_assignment.pdfDownload unt_fibonacci_assignment.pdf This assignment is designed to show one difference between higher level language (python ) vs lower level language (c) Please test the code on cell machine : CELL18-CSE.ENG.UNT.EDU Have fun and enjoy coding, thinking and learning

This assignment will give you an opportunity to learn more about secondary storage technologies, communications, and networks. Before working on this assignment, you will need to complete the Unit IV

This assignment will give you an opportunity to learn more about secondary storage technologies, communications, and networks. Before working on this assignment, you will need to complete the Unit IV Knowledge Check. Reflect on what you have learned about secondary storage, communications, and network security in this unit. Address the

In this journal, you will embark on a journey of exploration into emerging technologies that intrigue you; be it virtual reality, wearables, IoT, or any other fascinating field. You will research a ch

In this journal, you will embark on a journey of exploration into emerging technologies that intrigue you; be it virtual reality, wearables, IoT, or any other fascinating field. You will research a chosen technology and reflect on your learning journey, sharing insights gained, challenges faced, and areas primed for growth.

Database Detective This assignment measures your mastery of ULOs 3.4, 4.1, and 4.2. Before working on this assignment, you will need to complete the Unit VI Activity: Access 2021 – Chapter 2 – Wor

Database Detective  This assignment measures your mastery of ULOs 3.4, 4.1, and 4.2. Before working on this assignment, you will need to complete the Unit VI Activity: Access 2021 – Chapter 2 – Working with Tables in the SIMNet lab.  Download and complete the Unit VI Assignment Poole’s Nursery Template. Complete

This PowerPoint Presentation will measure your understanding of the concepts covered in this course to this point. For this assignment, you are going to create a PowerPoint presentation that would

This PowerPoint Presentation will measure your understanding of the concepts covered in this course to this point. For this assignment, you are going to create a PowerPoint presentation that would be appropriate to present to a class of high schoolers. Imagine that you are presenting a proposal to a congressional