Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

given code: server.h #ifndef SERVER_H #define SERVER_H #include #include #include #include using namespace std; class Server { public: Server(); Server(string, int); ~Server(); string getPiece(int); private:

image text in transcribedimage text in transcribedimage text in transcribedimage text in transcribed

given code:

server.h

#ifndef SERVER_H #define SERVER_H

#include #include #include #include

using namespace std;

class Server { public: Server(); Server(string, int); ~Server(); string getPiece(int); private: string *ascii; mutex access; };

#endif

server.cpp

#include "Server.h" #include #include

Server::Server(){}

Server::Server(string filename, int threads) { vector loaded; ascii = new string[threads]; ifstream in; string line; in.open(filename); if (!in.is_open()) { cout

int step = loaded.size()/threads; string piece = "";

for (int i = 0; i

Server::~Server() { delete []ascii; }

string Server::getPiece(int piece) { srand(time(NULL)); if (rand()/static_cast(RAND_MAX) > 0.80) throw "500 Internal Server Error"; cout

//file to implement

deadlock.cpp

#include #include #include "Server.h"

using namespace std;

Server *server;

void printToScreen(string toPrint) { /* Implement this function so that printing from each thread to stdout (i.e. using cout) doesn't clash with each other. */ }

void print(string out) { /* Output to file called deadlock.txt */ }

void lock(int choice) { /* Based on the choice, lock either the server or printer */ }

void unlock(int choice) { /* Based on the choice, unlock either the server or printer */ }

void spin(int index) { /* Wait until it is "index's" turn to write to the file. */ }

void evenThread(int index) { try { spin(index);

lock(0); // server printToScreen("Thread " + to_string(index) + ": Lock acquired for Server "); string piece = server->getPiece(index);

print(piece);

unlock(0); printToScreen("Thread " + to_string(index) + ": Lock released for Server ");

unlock(1); // printer printToScreen("Thread " + to_string(index) + ": Lock released for Printer "); } catch (const char *msg) { cerr

void oddThread(int index) { try { lock(0); // server printToScreen("Thread " + to_string(index) + ": Lock acquired for Server "); string piece = server->getPiece(index);

spin(index); print(piece);

unlock(0); printToScreen("Thread " + to_string(index) + ": Lock released for Server ");

unlock(1); // printer printToScreen("Thread " + to_string(index) + ": Lock released for Printer "); } catch (const char *msg) { cout

int main(int argc, char const *argv[]) { if (/*filename argument*/ != "" && /*thread count argument*/ != 0) { server = new Server(/*filename argument*/, /*thread count argument*/);

/* Fill in the main function code here */

delete server; } else { cout

return 0; }

Task 1 - Deadlock [9 Marks] a- te a mak . In this task you are required to im!plement a number of functions in the file deadlock.cpp. Thi AtiaR2^ T'he implementation of these functions shonld provide yon with two deadlock sita tions. You will need to use threads when implementing these functions. You may use lgli level C++ lineals OR pthreads lor llis purpose. You will also need lo use sollie locking mechanism to achieve mutual exclusion between threads. The methods you need to implement are as follows: 1. printToScreen(string toScreen) - Implement this function to deal with the racc condition on stdout (i.c. printing to the scrccn). If multiple thrcads try and output to the screen concurrently, much of the text being output wi collide with each other and create a line, or multiple lines, of difficlt to interpret text. This is what is meant by the race condition on stdout .oulpul(string toPri) Ths function writes the tring toPrin o a file called "deadlock.txt". Before opening the file you will need to output, to the screen, the string "Opening..." and before writing to the file output, to the screen, the string Writing.." Task 1 - Deadlock [9 Marks] a- te a mak . In this task you are required to im!plement a number of functions in the file deadlock.cpp. Thi AtiaR2^ T'he implementation of these functions shonld provide yon with two deadlock sita tions. You will need to use threads when implementing these functions. You may use lgli level C++ lineals OR pthreads lor llis purpose. You will also need lo use sollie locking mechanism to achieve mutual exclusion between threads. The methods you need to implement are as follows: 1. printToScreen(string toScreen) - Implement this function to deal with the racc condition on stdout (i.c. printing to the scrccn). If multiple thrcads try and output to the screen concurrently, much of the text being output wi collide with each other and create a line, or multiple lines, of difficlt to interpret text. This is what is meant by the race condition on stdout .oulpul(string toPri) Ths function writes the tring toPrin o a file called "deadlock.txt". Before opening the file you will need to output, to the screen, the string "Opening..." and before writing to the file output, to the screen, the string Writing

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_2

Step: 3

blur-text-image_3

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

Time Series Databases New Ways To Store And Access Data

Authors: Ted Dunning, Ellen Friedman

1st Edition

1491914726, 978-1491914724

More Books

Students also viewed these Databases questions