add include directory

This commit is contained in:
2024-12-17 19:49:16 +02:00
parent f20a1ef1a1
commit 8e2097a08d
8 changed files with 183 additions and 0 deletions

22
include/bconsumer.h Normal file
View File

@@ -0,0 +1,22 @@
//
// Created by lumijiez on 12/8/24.
//
#ifndef BCONSUMER_H
#define BCONSUMER_H
#include "buffer.h"
#include <semaphore>
class BConsumer {
public:
BConsumer(int id, Buffer& buffer, std::counting_semaphore<5>& sem);
void run() const;
private:
int id;
Buffer& buffer;
std::counting_semaphore<5>& consumerSem;
};
#endif //BCONSUMER_H

22
include/bproducer.h Normal file
View File

@@ -0,0 +1,22 @@
//
// Created by lumijiez on 12/8/24.
//
#ifndef BPRODUCER_H
#define BPRODUCER_H
#include "buffer.h"
#include <semaphore>
class BProducer {
public:
BProducer(int id, Buffer& buffer, std::counting_semaphore<3>& sem);
void run() const;
private:
int id;
Buffer& buffer;
std::counting_semaphore<3>& producerSem;
};
#endif //BPRODUCER_H

28
include/buffer.h Normal file
View File

@@ -0,0 +1,28 @@
//
// Created by lumijiez on 11/16/24.
//
#ifndef BUFFER_H
#define BUFFER_H
#include <queue>
#include <mutex>
#include <condition_variable>
class Buffer {
public:
explicit Buffer(int size);
void produce(int producerId, int item);
int consume(int consumerId);
bool isEmpty() const;
bool isFull() const;
private:
std::queue<int> items;
const int maxSize;
mutable std::mutex mtx;
std::condition_variable notFull;
std::condition_variable notEmpty;
};
#endif //BUFFER_H

22
include/consumer.h Normal file
View File

@@ -0,0 +1,22 @@
//
// Created by lumijiez on 11/16/24.
//
#ifndef CONSUMER_H
#define CONSUMER_H
#include <semaphore>
class Consumer {
public:
Consumer(int id, int read_fd, std::counting_semaphore<5>& consumerSem);
void run(std::atomic<int>& itemsConsumed, const std::atomic<bool>& stopFlag) const;
private:
int consumerId;
int readFd;
std::counting_semaphore<5>& consumerSemaphore;
};
#endif

View File

@@ -0,0 +1,20 @@
//
// Created by lumijiez on 12/8/24.
//
#ifndef P_PRODUCER_CONSUMER_H
#define P_PRODUCER_CONSUMER_H
#define PNUM_PRODUCERS 3
#define PNUM_CONSUMERS 2
#define PBUFFER_SIZE 10
#define PSEM_MUTEX_NAME "/buffer_mutex"
#define PSEM_FULL_NAME "/buffer_full"
#define PSEM_EMPTY_NAME "/buffer_empty"
void pproducer(int producer_id, int write_fd);
void pconsumer(int consumer_id, int read_fd);
#endif //P_PRODUCER_CONSUMER_H

21
include/producer.h Normal file
View File

@@ -0,0 +1,21 @@
//
// Created by lumijiez on 11/16/24.
//
#ifndef PRODUCER_H
#define PRODUCER_H
#include <semaphore>
class Producer {
public:
Producer(int id, int write_fd, std::counting_semaphore<3>& producerSem);
void run(std::atomic<int>& itemsProduced, const std::atomic<bool>& stopFlag) const;
private:
int producerId;
int writeFd;
std::counting_semaphore<3>& producerSemaphore;
};
#endif

30
include/reader_writer.h Normal file
View File

@@ -0,0 +1,30 @@
//
// Created by lumijiez on 12/8/24.
//
#ifndef READER_WRITER_H
#define READER_WRITER_H
#include <semaphore.h>
#include <fstream>
class ReaderWriter {
public:
ReaderWriter(int numReaders, int numWriters, std::string filename);
~ReaderWriter();
void run();
private:
int numReaders;
int numWriters;
std::string filename;
sem_t resourceAccess{};
sem_t readCountAccess{};
int readCount;
int writeCount;
static void* reader(void* arg);
static void* writer(void* arg);
};
#endif //READER_WRITER_H

18
include/signal_handler.h Normal file
View File

@@ -0,0 +1,18 @@
//
// Created by lumijiez on 11/16/24.
//
#ifndef SIGNAL_HANDLER_H
#define SIGNAL_HANDLER_H
#include <cmath>
#include <iostream>
#include <csignal>
#include <cstdlib>
#include <stdexcept>
#include <limits>
#include <cstdint>
#include <bits/random.h>
#include <random>
void setupSignalHandlers();
#endif //SIGNAL_HANDLER_H