The goal of this program is to simulate the behaviour of a jam factory. We split the problem in 4 separated elements which must be synchronized.
- The small jar injector
- The big jar injector
- The valve
- The clock
We need to make the same exercise using two separate sets of tools
- Processus and semaphores
- Threads and monitors For both we can write a solution (pseudo-code) considering we have a function P(int i) which is called by a processus/threads waiting for another processus/threads to call V(int i).
| Jar Function | Valve Function | Clock Function | Jar_2 Function |
|---|---|---|---|
Start
While True Then
Insert_Jar()
V(1)
P(0)
Remove_Jar()
V(3)
P(3)
End While
End
|
Start
While True Then
P(1)
Open_Valve()
V(2)
P(2)
Close_Valve()
V(0)
End While
End
|
|
Start
While True Then
P(3)
Insert_Jar()
For i from 0 to 2
V(1)
P(0)
Remove_Jar()
V(3)
End While
End
|
Usage ./main
-t , run the demo using threads and monitors. (Default use semaphores and processus)
-v, --verbose , explain what is being done
-g1 [VALUE] , number of small jar to produce (Default 1)
-g2 [VALUE] , number of big jar to produce (Default 1)
-h, --help , display this help and exit
--version , output version information and exit
This project is using Make to build. Run make -f makefile [OPTION].
Options are:
- Clean
- Run