Buffer always is 0 when printing from consumer.c

This commit is contained in:
TriantaTV 2022-10-14 00:06:24 -05:00
parent 688411c38b
commit 26011d7d74
3 changed files with 44 additions and 21 deletions

View File

@ -7,6 +7,7 @@ int StringToNumber(char* argv);
typedef struct SharedStruct typedef struct SharedStruct
{ {
int buffer[10]; int buffer[10];
int count[10];
sem_t semConsumer; sem_t semConsumer;
sem_t semProducer; sem_t semProducer;
} SharedStruct; } SharedStruct;

View File

@ -5,8 +5,8 @@
#include "shared.h" #include "shared.h"
void* Consumer(void* arg); void* Consumer(void* arg);
void consume_item(long int item); void consume_item(int item);
long int remove_item(void); int remove_item(void);
int main(int argc, char* argv[]) int main(int argc, char* argv[])
{ {
@ -18,7 +18,7 @@ int main(int argc, char* argv[])
int sharedID = StringToNumber(argv[1]); int sharedID = StringToNumber(argv[1]);
SharedStruct* sharedMem = shmat(sharedID, NULL, 0); SharedStruct* sharedMem = shmat(sharedID, NULL, 0);
sem_wait(&sharedMem->semConsumer); sem_wait(&sharedMem->semConsumer);
printf("Checking for 5 in shared struct.\n"); // TODO: Fix buffer not printing correctly
printf("%d\n", sharedMem->buffer[0]); printf("%d\n", sharedMem->buffer[0]);
return 0; return 0;
} }
@ -28,7 +28,7 @@ int main(int argc, char* argv[])
// Add ability to use shared memory // Add ability to use shared memory
void* Consumer(void* arg) void* Consumer(void* arg)
{ {
long int consumeNum; int consumeNum;
while (1) while (1)
{ {
// down(&full); // down(&full);
@ -42,13 +42,13 @@ void* Consumer(void* arg)
} }
// Manage item taken from shared memory // Manage item taken from shared memory
void consume_item(long int item) void consume_item(int item)
{ {
; ;
} }
// Take item out of shared memory // Take item out of shared memory
long int remove_item() int remove_item(void)
{ {
; ;
} }

View File

@ -5,9 +5,10 @@
#include <unistd.h> #include <unistd.h>
#include "shared.h" #include "shared.h"
void* Producer(void* arg); int GetNextFreeSlot(SharedStruct* sharedMem);
long int produce_item(void); void Producer(SharedStruct* sharedMem);
void insert_item(long int item); int produce_item(void);
int insert_item(int item, SharedStruct* sharedMem);
int main(int argc, char* argv[]) int main(int argc, char* argv[])
@ -20,28 +21,45 @@ int main(int argc, char* argv[])
srandom((unsigned int) time(NULL)); srandom((unsigned int) time(NULL));
int sharedID = StringToNumber(argv[1]); int sharedID = StringToNumber(argv[1]);
SharedStruct* sharedMem = shmat(sharedID, NULL, 0); SharedStruct* sharedMem = shmat(sharedID, NULL, 0);
printf("Adding 5 to shared struct.\n"); Producer(sharedMem);
sharedMem->buffer[0] = 5;
sem_post(&sharedMem->semConsumer); sem_post(&sharedMem->semConsumer);
return 0; return 0;
} }
int GetNextFreeSlot(SharedStruct* sharedMem)
{
int slot = -1;
for (int i = 0; i < 10; i++)
{
if ((sharedMem->buffer[i] != -1) && (sharedMem->buffer[(i+1)%10] == -1))
{
slot = (i+1)%10;
return slot;
}
}
return slot;
}
// Producer main function // Producer main function
// TODO: Add waiting for one producer at a time // TODO: Add waiting for one producer at a time
// Add ability to use shared memory // Add ability to use shared memory
void* Producer(void* arg) void Producer(SharedStruct* sharedMem)
{ {
long int insertNum; int insertNum;
SharedStruct* sharedMem; // TODO: For testing purposes, revert max to 100
while (1) for (int i = 0; i < 5; i++)
{ {
insertNum = produce_item(); insertNum = produce_item();
printf("The random number is %li\n", insertNum); printf("%d is inserted.\n", insertNum);
// sem_wait(&semProducer); // sem_wait(&semProducer);
// down(&empty); // down(&empty);
// down(&mutex); // down(&mutex);
insert_item(insertNum); // if (insert_item(insertNum, sharedMem) == 0)
// sem_post(&semProducer); insert_item(insertNum, sharedMem);
// {
// --i;
// continue;
// }
// up(&mutex); // up(&mutex);
// up(&full); // up(&full);
break; break;
@ -49,13 +67,17 @@ void* Producer(void* arg)
} }
// Generate a number between 0 and 9 // Generate a number between 0 and 9
long 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
void insert_item(long int item) int insert_item(int item, SharedStruct* sharedMem)
{ {
; int slot = GetNextFreeSlot(sharedMem);
if (slot == -1)
return 0;
sharedMem->buffer[0] = item;
return 1;
} }