Question
create a c++ program with parallel process that uses a ring buffer. the parent process should create the semaphore set and segment and start the
create a c++ program with parallel process that uses a ring buffer. the parent process should create the semaphore set and segment and start the children process, then the process should back off and wait until other is finished.
another process shall be created for user input from the keyboard and write them to the ring buffer, also another process shall be created to generate text and put it on the ring buffer. another process shall be created to read from the ring buffer and write it to the screen. all necessary resources must be synchronized
how is suppose to look is, when you run the programm, it keeps writing, 0123456789 but when you type from keyboard, for example: im using chegg, and hit enter, the aplhabate and numbers start mixing and can come in any ways like, 0i12m345 us6i78n9g0 and on...
i have an incomplete code, below. it need to be complete, with screenshot of the output.
.....................................................................................................
#include
template
public: RingBuffer(size_t size) : mObjects(size), mHead(0), mTail(0) { }
bool IsEmpty() const { return (mHead == mTail); }
bool IsFull() const { return ((mTail + 1) % mObjects.size() == mHead); }
void Put(const T& object) { std::unique_lock
mObjects[mTail] = object; mTail = (mTail + 1) % mObjects.size();
mReadConditionVariable.notify_one(); }
T Get() { std::unique_lock
T result = mObjects[mHead]; mHead = (mHead + 1) % mObjects.size();
mWriteConditionVariable.notify_one();
return result; } };
void keyboardThread(RingBuffer
void writeThread(RingBuffer
while (!stopToken.stop_requested()) { buffer.Put(text[index]); ++index; if (index == textLength) { index = 0; } std::this_thread::sleep_for(std::chrono::milliseconds(sleepTime)); } }
void readThread(RingBuffer
int main() { RingBuffer
std::jthread number_writer( std::bind(writeThread, std::ref(buffer), "0123456789", 500, std::placeholders::_1)); std::jthread reader_thread( std::bind(readThread, std::ref(buffer), 1000, std::placeholders::_1)); std::jthread keyboard_thread( std::bind(keyboardThread, std::ref(buffer), 500, std::placeholders::_1));
keyboard_thread.join();
reader_thread.request_stop(); reader_thread.join();
number_writer.request_stop();
return 0; }
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started