// Jack Sangdahl // CSCI3753 SP24 // PA4 Shared Array #include "array.h" int array_init(array *q) { q->head = 0; q->tail = 0; pthread_mutex_init(&q->lock, NULL); sem_init(&q->avail, 0, ARRAY_SIZE); sem_init(&q->empty, 0, 0); return 0; } int array_put(array *q, char *hostname) { sem_wait(&q->avail); pthread_mutex_lock(&q->lock); q->data[q->tail++] = hostname; q->tail %= ARRAY_SIZE; pthread_mutex_unlock(&q->lock); sem_post(&q->empty); return 0; } int array_get(array *q, char **hostname) { sem_wait(&q->empty); pthread_mutex_lock(&q->lock); *hostname = q->data[q->head++]; q->head %= ARRAY_SIZE; pthread_mutex_unlock(&q->lock); sem_post(&q->avail); return 0; } void array_free(array *q) { pthread_mutex_destroy(&q->lock); sem_destroy(&q->avail); sem_destroy(&q->empty); }