Files
CS3841/06-MemoryManager/pthread_testmemmgr.c
p-w-rs 7bb91e666d stuff
2022-09-07 11:18:56 -05:00

54 lines
1.1 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <pthread.h>
#include "memory_manager.h"
#define MY_HEAP_SIZE 4096
#define ALLOC_SIZE 1024
#define THREAD_COUNT 10
void* thread_routine(void* args)
{
for(int i = 0; i < 25; i++) {
char* myptr = mymalloc_ff(ALLOC_SIZE);
usleep(20);
if(myptr != NULL) {
printf("Thread %lu allocated %d byte(s): %p\n", pthread_self(), ALLOC_SIZE, myptr);
*myptr = 'a' + i;
printf("Thread %lu write %c\n", pthread_self(), *myptr);
myfree(myptr);
printf("Thread %lu freed %p\n", pthread_self(), myptr);
} else {
printf("Thread %lu could not allocate %d byte(s)\n", pthread_self(), ALLOC_SIZE);
}
}
return NULL;
}
int main()
{
pthread_t mythreads[THREAD_COUNT];
char my_heap[MY_HEAP_SIZE];
mmInit(my_heap, MY_HEAP_SIZE);
for(int i = 0; i < THREAD_COUNT; i++) {
if(pthread_create(&mythreads[i], NULL, thread_routine, NULL) == -1) {
printf("COULD NOT CREATE A THREAD\n");
exit(EXIT_FAILURE);
}
}
for(int i = 0; i < THREAD_COUNT; i++) {
pthread_join(mythreads[i], NULL);
}
mmDestroy();
return 0;
}