63 lines
1.6 KiB
C++
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;
|
|
}
|