1answer.
Ask question
Login Signup
Ask question
All categories
  • English
  • Mathematics
  • Social Studies
  • Business
  • History
  • Health
  • Geography
  • Biology
  • Physics
  • Chemistry
  • Computers and Technology
  • Arts
  • World Languages
  • Spanish
  • French
  • German
  • Advanced Placement (AP)
  • SAT
  • Medicine
  • Law
  • Engineering
kondor19780726 [428]
4 years ago
9

OBJECTIVE This project will familiarize you with the use of pthreads, pthread mutexes and pthread condition variables. Your prog

ram will earn you no credit if it uses semaphores instead of mutexes and condition variables. THE PROBLEM A car tunnel is so poorly ventilated that it has become

Computers and Technology
1 answer:
zysi [14]4 years ago
8 0

Answer:

Check the explanation

Explanation:

/*

This program will simulate a tunnel with a limit of how many cars may move through it,

and will also simulate the cars going north and south-bound through the tunnel. We will

use pthreads, pthread mutexes, and pthread condition variables to simulate this.

*/

#include <iostream>

#include <fstream>

#include <sstream>

#include <string>

#include <unistd.h>

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <pthread.h>

#include <string.h>

#include <signal.h>

#include <sys/types.h>

using namespace std;

#define MAXTHREADS 128

static int maxCarsInTunnel;

static int maxNCarsInTunnel;

static int maxSCarsInTunnel;

static int totalNCars;

static int totalSCars;

static int currentCarsInTunnel;

static int currentNCarsInTunnel;

static int currentSCarsInTunnel;

static int numCarsWaiting;

static pthread_mutex_t lockAccess = PTHREAD_MUTEX_INITIALIZER;

static pthread_cond_t cond = PTHREAD_COND_INITIALIZER;

void *northCar(void *arg);

void *southCar(void *arg);

struct car {

int carNo;

int travelTime;

bool waited;

};

int main() {

pthread_t cartid[MAXTHREADS];

int storage = 0;

cin >> maxCarsInTunnel;

cin >> maxNCarsInTunnel;

cin >> maxSCarsInTunnel;

cout << "Maximum number of cars in the tunnel: " << maxCarsInTunnel << endl;

cout << "Maximum number of northbound cars: " << maxNCarsInTunnel << endl;

cout << "Maximum number of southbound cars: " << maxSCarsInTunnel << endl;

unsigned int arrival_time;

char direction;

unsigned int traversal_time;

struct car argList;

while (cin >> arrival_time >> direction >> traversal_time) {

sleep(arrival_time);

 

argList.travelTime = traversal_time;

argList.waited = false;

if (direction == 'N') {

totalNCars++;

argList.carNo = totalNCars;

pthread_create(&cartid[storage], NULL, northCar, (void *) &argList);

}

else if (direction == 'S') {

totalSCars++;

argList.carNo = totalSCars;

pthread_create(&cartid[storage], NULL, southCar, (void *) &argList);

}

storage++;

}

for (int i = 0; i < storage; i++) {

pthread_join(cartid[i], NULL);

}

cout << totalNCars << " northbound car(s) crossed the tunnel." << endl;

cout << totalSCars << " southbound car(s) crossed the tunnel." << endl;

cout << numCarsWaiting << " car(s) had to wait." << endl;

return 0;

}

void *northCar(void* arg) {

int tunnelTime;

int carNum;

bool wait;

struct car *argptr;

argptr = (struct car *) arg;

tunnelTime = argptr->travelTime;

carNum = argptr->carNo;

wait = argptr->waited;

pthread_mutex_lock(&lockAccess);

cout << "Northbound car # " << carNum << " arrives at the tunnel." << endl;

while (currentNCarsInTunnel >= maxNCarsInTunnel || currentCarsInTunnel >= maxCarsInTunnel) {

if (wait == false) {

wait = true;

numCarsWaiting++;

}

pthread_cond_wait(&cond, &lockAccess);

}

 

currentNCarsInTunnel++;

currentCarsInTunnel++;

cout << "Northbound car # " << carNum << " enters the tunnel." << endl;

pthread_cond_signal(&cond);

pthread_mutex_unlock(&lockAccess);

sleep(tunnelTime);

pthread_mutex_lock(&lockAccess);

cout << "Northbound car # " << carNum << " exits the tunnel." << endl;

currentNCarsInTunnel--;

currentCarsInTunnel--;

 

pthread_cond_broadcast(&cond);

pthread_mutex_unlock(&lockAccess);

}

void *southCar(void* arg) {

int tunnelTime;

int carNum;

bool wait;

struct car *argptr;

argptr = (struct car *) arg;

tunnelTime = argptr->travelTime;

carNum = argptr->carNo;

wait = argptr->waited;

pthread_mutex_lock(&lockAccess);

cout << "Southbound car # " << carNum << " arrives at the tunnel." << endl;

while (currentSCarsInTunnel >= maxSCarsInTunnel || currentCarsInTunnel >= maxCarsInTunnel) {

if (wait == false) {

wait = true;

numCarsWaiting++;

}

pthread_cond_wait(&cond, &lockAccess);

}

currentSCarsInTunnel++;

currentCarsInTunnel++;

cout << "Southbound car # " << carNum << " enters the tunnel." << endl;

pthread_cond_signal(&cond);

pthread_mutex_unlock(&lockAccess);

sleep(tunnelTime);

pthread_mutex_lock(&lockAccess);

cout << "Southbound car # " << carNum << " exits the tunnel." << endl;

currentSCarsInTunnel--;

currentCarsInTunnel--;

pthread_cond_broadcast(&cond);

pthread_mutex_unlock(&lockAccess);

}

Kindly check the attached images below to see the code screenshot and code output.

You might be interested in
Read the following code: x = currentWeight print(x - 20) What value will this code calculate?
Serga [27]

D because weight print = x and -20 is the pound loss.

5 0
3 years ago
A large gambling company needs to be able to accept high volumes of customer wagers within short timeframes for high-profile spo
Dima020 [189]

Answer: A. a mobile app that only accepts wagers based on the user's location

Explanation:

Elastic cloud simply refers to the cloud computing offering which due to the need for change helps in the provision of variable service levels.

Based on the information given in the question, an effective elastic Cloud solution that can meet this client’s needs is a mobile app that only accepts wagers based on the user's location.

Since there are strict laws that prohibit gambling activities outside the licensed zones, the user location is vital in the mobile app.

5 0
3 years ago
What information should be included in the closing paragraph of a thank-you letter? a. Mention skills that were omitted during t
stiks02 [169]
The answer is c and sorry for being so rude I didn't realize it was you girly

3 0
4 years ago
Read 2 more answers
Regarding k-NN algorithm which of the following statements is true?
Contact [7]

Answer:

A

Explanation:

KNN could be used for both classification and regression problems

3 0
2 years ago
Match each word to its correct meaning.
monitta

Answer:

1. Graphics.

2. Clip art.

Explanation:

1. Graphics: visual representations of information that are not text-images, photos, symbols, diagrams, and so on. Some examples of software applications used for graphics design are CorelDraw, Adobe Illustrator, Affinity Designer, Inkscape, Adobe Photoshop, etc.

Adobe Photoshop is a proprietary software application designed and developed by Adobe inc. for both Windows and MacOS operating system. It is a raster graphics editor that's typically used for imaging and graphics design. It comprises of various shape tools such as ellipse, line, polygon, triangle, custom shape and rectangle.

2. Clip art: digital artwork such as symbols and pictures that can be imported for use in documents or other software applications.

7 0
3 years ago
Other questions:
  • Which best describes a computer bug? A piece of computer hardware that is out of date or has a newer version a piece of computer
    14·2 answers
  • A persons decision to take action without being asked is
    9·1 answer
  • Uugurfofyhjfsjvrdjctstghfjddd
    13·1 answer
  • What is used in computers to communicate with wireless keyboards, mice, and printers?
    8·1 answer
  • Click to review the online content. Then answer the question(s) below, using complete sentences. Scroll down to view additional
    14·1 answer
  • What specific tool allows you to create GPOs, view a GPO's settings, link and unlink GPOs with containers, and manage the inheri
    10·1 answer
  • . An access specifier is one of three keywords:
    14·1 answer
  • Please help What two Boolean operators can you use to narrow your search results?
    7·1 answer
  • PLEASE HELP WITH KHAN ACADEMY WILL GIVE BRAINLIEST!!!!!!!!!!!!!!!!!!!!!!!!
    12·1 answer
  • 5. What are some situations where you might find it useful to use the “!” symbol in a program?
    9·2 answers
Add answer
Login
Not registered? Fast signup
Signup
Login Signup
Ask question!