Added comments for readability

This commit is contained in:
TriantaTV 2022-10-15 20:29:52 -05:00
parent 898851a185
commit cbd8b5ceb0
4 changed files with 24 additions and 30 deletions

View File

@ -9,6 +9,7 @@ void Consume(SharedStruct* sharedMem);
void consume_item(int item, SharedStruct* sharedMem); void consume_item(int item, SharedStruct* sharedMem);
int remove_item(SharedStruct* sharedMem); int remove_item(SharedStruct* sharedMem);
// Checks for SharedID, then begins producing numbers into shared memory.
int main(int argc, char* argv[]) int main(int argc, char* argv[])
{ {
if (argc != 2) if (argc != 2)
@ -22,9 +23,7 @@ int main(int argc, char* argv[])
return 0; return 0;
} }
// Consumer main function // Starts the consumer process.
// TODO: Add waiting for one consumer at a time
// Add ability to use shared memory
void StartConsumer(SharedStruct* sharedMem) void StartConsumer(SharedStruct* sharedMem)
{ {
for (int i = 0; i < 5; i++) for (int i = 0; i < 5; i++)
@ -35,6 +34,7 @@ void StartConsumer(SharedStruct* sharedMem)
} }
} }
// Takes a number from the shared memory and consumes it.
void Consume(SharedStruct* sharedMem) void Consume(SharedStruct* sharedMem)
{ {
int consumeNum; int consumeNum;
@ -46,14 +46,14 @@ void Consume(SharedStruct* sharedMem)
return; return;
} }
// Manage item taken from shared memory // Increments the count of numbers generated so far in shared memory.
void consume_item(int item, SharedStruct* sharedMem) void consume_item(int item, SharedStruct* sharedMem)
{ {
sharedMem->count[item]++; sharedMem->count[item]++;
return; return;
} }
// Take item out of shared memory // Take item out of shared memory.
int remove_item(SharedStruct* sharedMem) int remove_item(SharedStruct* sharedMem)
{ {
int item = sharedMem->buffer[0]; int item = sharedMem->buffer[0];

View File

@ -8,8 +8,8 @@ int CheckArgumentPosition(int argc, char* argv[], char letter);
void CreateChildForks(int forkAmount, int forkType, int sharedID); void CreateChildForks(int forkAmount, int forkType, int sharedID);
int GetSplitAmount(int argc, char* argv[], int forkType); int GetSplitAmount(int argc, char* argv[], int forkType);
// TODO: Clean up main // Checks for producer and consumer arguments, creates shared memory,
// Add command line arguments for producer and consumer number // then creates forks sending the sharedID as an argument.
int main(int argc, char* argv[]) int main(int argc, char* argv[])
{ {
int producerAmount = GetSplitAmount(argc, argv, 0); int producerAmount = GetSplitAmount(argc, argv, 0);
@ -22,13 +22,12 @@ int main(int argc, char* argv[])
} }
SharedStruct* sharedMem = shmat(sharedID, NULL, 0); SharedStruct* sharedMem = shmat(sharedID, NULL, 0);
SharedStructInit(sharedMem); SharedStructInit(sharedMem);
// Create child forks
// TODO: Add creating consumers and producers instead of general forks
CreateChildForks(producerAmount, 0, sharedID); CreateChildForks(producerAmount, 0, sharedID);
CreateChildForks(consumerAmount, 1, sharedID); CreateChildForks(consumerAmount, 1, sharedID);
return 0; return 0;
} }
// Checks for argument based on passed in letter.
int CheckArgumentPosition(int argc, char* argv[], char letter) int CheckArgumentPosition(int argc, char* argv[], char letter)
{ {
char argumentHyphen = '-'; char argumentHyphen = '-';
@ -43,10 +42,10 @@ int CheckArgumentPosition(int argc, char* argv[], char letter)
return -1; return -1;
} }
// Function creates an amount of children based on given type // Function creates an amount of children based on given type.
// forkAmount: Amount of children to create // forkAmount: Amount of children to create.
// forkType: 0 for creating producers, non-zero for consumers // forkType: 0 for creating producers, non-zero for consumers.
// sharedID: ID number of shared memory // sharedID: ID number of shared memory.
void CreateChildForks(int forkAmount, int forkType, int sharedID) void CreateChildForks(int forkAmount, int forkType, int sharedID)
{ {
int forkID; int forkID;
@ -59,13 +58,10 @@ void CreateChildForks(int forkAmount, int forkType, int sharedID)
exit(1); exit(1);
} }
if (forkID == 0) if (forkID == 0)
{
break; break;
}
} }
if (forkID != 0) if (forkID != 0)
return; return;
// TODO: Pass through sharedID
char sharedIDStr[16]; char sharedIDStr[16];
sprintf(sharedIDStr, "%d", sharedID); sprintf(sharedIDStr, "%d", sharedID);
if (forkType == 0) if (forkType == 0)
@ -75,8 +71,8 @@ void CreateChildForks(int forkAmount, int forkType, int sharedID)
exit(0); exit(0);
} }
// Takes in argc, argv, and type of fork to check for // Takes in argc, argv, and type of fork to check for.
// forkType: 0 for creating producers, non-zero for consumers // forkType: 0 for creating producers, non-zero for consumers.
int GetSplitAmount(int argc, char* argv[], int forkType) int GetSplitAmount(int argc, char* argv[], int forkType)
{ {
char letter; char letter;

View File

@ -11,7 +11,7 @@ void Produce(SharedStruct* sharedMem);
int produce_item(void); int produce_item(void);
int insert_item(int item, SharedStruct* sharedMem); int insert_item(int item, SharedStruct* sharedMem);
// Checks for SharedID, then begins producing numbers into shared memory.
int main(int argc, char* argv[]) int main(int argc, char* argv[])
{ {
if (argc != 2) if (argc != 2)
@ -26,6 +26,8 @@ int main(int argc, char* argv[])
return 0; return 0;
} }
// Checks for the next available slot in buffer and returns slot number.
// TODO: Fix function to get next free slot and return slot number.
int GetNextFreeSlot(SharedStruct* sharedMem) int GetNextFreeSlot(SharedStruct* sharedMem)
{ {
int slot = -1; int slot = -1;
@ -40,9 +42,7 @@ int GetNextFreeSlot(SharedStruct* sharedMem)
return slot; return slot;
} }
// Producer main function // Starts the producer process.
// TODO: Add waiting for one producer at a time
// Add ability to use shared memory
void StartProducer(SharedStruct* sharedMem) void StartProducer(SharedStruct* sharedMem)
{ {
// TODO: For testing purposes, revert max to 100 // TODO: For testing purposes, revert max to 100
@ -54,6 +54,7 @@ void StartProducer(SharedStruct* sharedMem)
} }
} }
// Produces and puts a number into the next free slot in the buffer.
void Produce(SharedStruct* sharedMem) void Produce(SharedStruct* sharedMem)
{ {
int insertNum; int insertNum;
@ -65,19 +66,16 @@ void Produce(SharedStruct* sharedMem)
return; return;
} }
// Generate a number between 0 and 9 // Generate a number between 0 and 9.
int produce_item(void) int produce_item(void)
{ {
return random() % 10; return random() % 10;
} }
// Insert a number into the shared memory // Insert a number into the shared memory.
// TODO: Reimplement insertion using the next slot from GetNextFreeSlot().
int insert_item(int item, SharedStruct* sharedMem) int insert_item(int item, SharedStruct* sharedMem)
{ {
// int slot = GetNextFreeSlot(sharedMem);
// while (slot < 0)
// slot = GetNextFreeSlot(sharedMem);
// sharedMem->buffer[slot] = item;
sharedMem->buffer[0] = item; sharedMem->buffer[0] = item;
return 1; return 1;
} }

View File

@ -1,6 +1,7 @@
#include <stdio.h> #include <stdio.h>
#include "shared.h" #include "shared.h"
// Initializes the struct in shared memory
void SharedStructInit(SharedStruct* sharedMem) void SharedStructInit(SharedStruct* sharedMem)
{ {
for (int i = 0; i < 10; i++) for (int i = 0; i < 10; i++)
@ -11,10 +12,9 @@ void SharedStructInit(SharedStruct* sharedMem)
sem_init(&sharedMem->mutex, 1, 1); sem_init(&sharedMem->mutex, 1, 1);
sem_init(&sharedMem->empty, 1, 1); sem_init(&sharedMem->empty, 1, 1);
sem_init(&sharedMem->full, 1, 1); sem_init(&sharedMem->full, 1, 1);
// sem_init(&sharedMem->semConsumer, 1, 1);
// sem_init(&sharedMem->semProducer, 1, 1);
} }
// Takes array of letters and turns it into a number
int StringToNumber(char* argv) int StringToNumber(char* argv)
{ {
int splitAmount; int splitAmount;