4600-project-1/src/transformer.cpp
2022-04-06 01:45:57 -05:00

63 lines
1.6 KiB
C++

/*
+-------------+---------+-----------------------+
| John Breaux | jab0910 | JohnBreaux@my.unt.edu |
+-------------+---------+-----------------------+
| 2022-04-04 |
+-----------------------------------------------+
*/
#include <semaphore.h> // POSIX semaphores!
#include "list.hpp" // list implementation
#include "globals.hpp" // lists, sems, muts
#include "transformer.hpp"
void transform(block *x, block *y);
void *transformer (void *) {
block *x, *y;
while (true) {
// wait for element on list1
wait(sem_list1);
// mutual exclusion for list1
wait(mut_list1);
//* x:=unlink(list1);
x = unlink(list1);
// mutual exclusion for list1
signal(mut_list1);
// wait for element on freelist
wait(sem_freelist);
// mutual exclusion for freelist
wait(mut_freelist);
//* y:=unlink(freelist);
y = unlink(freelist);
// mutual exclusion for freelist
signal(mut_freelist);
//* use_block_x_to_produce_info_in_y(x,y)
transform(x, y);
// mutual exclusion for freelist
wait(mut_freelist);
//* link(x, freelist);
link(x, freelist);
// mutual exclusion for freelist
signal(mut_freelist);
// freelist++
signal(sem_freelist);
// mutual exclusion for list2
wait(mut_list2);
//* link(y, list2);
link(y, list2);
// mutual exclusion for list2
signal(mut_list2);
// signal new element on list2
signal(sem_list2);
}
return nullptr;
}
void transform(block *x, block *y) {
return;
}