all algorithms implemented
This commit is contained in:
parent
ab9573e500
commit
37568c556c
|
@ -32,7 +32,7 @@ func main() {
|
||||||
|
|
||||||
log.Printf("*** Start\n")
|
log.Printf("*** Start\n")
|
||||||
|
|
||||||
var variant = "a"
|
var variant = "dekker"
|
||||||
if len(os.Args[1:]) > 0 { // do we have arguments?
|
if len(os.Args[1:]) > 0 { // do we have arguments?
|
||||||
variant = os.Args[1]
|
variant = os.Args[1]
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,6 +13,11 @@
|
||||||
|
|
||||||
package ewd123b
|
package ewd123b
|
||||||
|
|
||||||
|
import (
|
||||||
|
"../controller"
|
||||||
|
"log"
|
||||||
|
)
|
||||||
|
|
||||||
// global synchronization variables
|
// global synchronization variables
|
||||||
var c1, c2 = 1, 1
|
var c1, c2 = 1, 1
|
||||||
|
|
||||||
|
@ -24,10 +29,51 @@ func Start() {
|
||||||
|
|
||||||
// process1 simulates the behaviour of the first process
|
// process1 simulates the behaviour of the first process
|
||||||
func process1() {
|
func process1() {
|
||||||
// TO DO
|
L1:
|
||||||
|
if c2 == 0 {
|
||||||
|
goto L1
|
||||||
|
}
|
||||||
|
|
||||||
|
c1 = 0
|
||||||
|
|
||||||
|
controller.EnterCriticalSection(1)
|
||||||
|
controller.InsideCriticalSection(1, 50)
|
||||||
|
controller.LeaveCriticalSection(1)
|
||||||
|
|
||||||
|
c1 = 1
|
||||||
|
|
||||||
|
controller.OutsideCriticalSection(1, 100)
|
||||||
|
|
||||||
|
if controller.ProcessCrashed(0.1) {
|
||||||
|
log.Println("Process 1 crashed")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
goto L1
|
||||||
}
|
}
|
||||||
|
|
||||||
// process2 simulates the behaviour of the second process
|
// process2 simulates the behaviour of the second process
|
||||||
func process2() {
|
func process2() {
|
||||||
// TO DO
|
L2:
|
||||||
|
if c1 == 0 {
|
||||||
|
goto L2
|
||||||
|
}
|
||||||
|
|
||||||
|
c2 = 0
|
||||||
|
|
||||||
|
controller.EnterCriticalSection(2)
|
||||||
|
controller.InsideCriticalSection(2, 50)
|
||||||
|
controller.LeaveCriticalSection(2)
|
||||||
|
|
||||||
|
c2 = 1
|
||||||
|
|
||||||
|
controller.OutsideCriticalSection(2, 100)
|
||||||
|
|
||||||
|
if controller.ProcessCrashed(0.1) {
|
||||||
|
log.Println("Process 2 crashed")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
goto L2
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,6 +13,11 @@
|
||||||
|
|
||||||
package ewd123c
|
package ewd123c
|
||||||
|
|
||||||
|
import (
|
||||||
|
"../controller"
|
||||||
|
"log"
|
||||||
|
)
|
||||||
|
|
||||||
// global synchronization variables
|
// global synchronization variables
|
||||||
var c1, c2 = 1, 1
|
var c1, c2 = 1, 1
|
||||||
|
|
||||||
|
@ -24,10 +29,49 @@ func Start() {
|
||||||
|
|
||||||
// process1 simulates the behaviour of the first process
|
// process1 simulates the behaviour of the first process
|
||||||
func process1() {
|
func process1() {
|
||||||
// TO DO
|
A1:
|
||||||
|
c1 = 0
|
||||||
|
L1:
|
||||||
|
if c2 == 0 {
|
||||||
|
goto L1
|
||||||
|
}
|
||||||
|
|
||||||
|
controller.EnterCriticalSection(1)
|
||||||
|
controller.InsideCriticalSection(1, 50)
|
||||||
|
controller.LeaveCriticalSection(1)
|
||||||
|
|
||||||
|
c1 = 1
|
||||||
|
controller.OutsideCriticalSection(1, 100)
|
||||||
|
|
||||||
|
if controller.ProcessCrashed(0.1) {
|
||||||
|
log.Println("Process 1 crashed")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
goto A1
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// process2 simulates the behaviour of the second process
|
// process2 simulates the behaviour of the second process
|
||||||
func process2() {
|
func process2() {
|
||||||
// TO DO
|
A2:
|
||||||
|
c2 = 0
|
||||||
|
L2:
|
||||||
|
if c1 == 0 {
|
||||||
|
goto L2
|
||||||
|
}
|
||||||
|
|
||||||
|
controller.EnterCriticalSection(2)
|
||||||
|
controller.InsideCriticalSection(2, 50)
|
||||||
|
controller.LeaveCriticalSection(2)
|
||||||
|
|
||||||
|
c2 = 1
|
||||||
|
controller.OutsideCriticalSection(2, 100)
|
||||||
|
|
||||||
|
if controller.ProcessCrashed(0.1) {
|
||||||
|
log.Println("Process 2 crashed")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
goto A2
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,6 +13,11 @@
|
||||||
|
|
||||||
package ewd123d
|
package ewd123d
|
||||||
|
|
||||||
|
import (
|
||||||
|
"../controller"
|
||||||
|
"log"
|
||||||
|
)
|
||||||
|
|
||||||
// global synchronization variables
|
// global synchronization variables
|
||||||
var c1, c2 = 1, 1
|
var c1, c2 = 1, 1
|
||||||
|
|
||||||
|
@ -24,10 +29,50 @@ func Start() {
|
||||||
|
|
||||||
// process1 simulates the behaviour of the first process
|
// process1 simulates the behaviour of the first process
|
||||||
func process1() {
|
func process1() {
|
||||||
// TO DO
|
L1:
|
||||||
|
c1 = 0
|
||||||
|
if c2 == 0 {
|
||||||
|
c1 = 1
|
||||||
|
goto L1
|
||||||
|
}
|
||||||
|
|
||||||
|
controller.EnterCriticalSection(1)
|
||||||
|
controller.InsideCriticalSection(1, 50)
|
||||||
|
controller.LeaveCriticalSection(1)
|
||||||
|
|
||||||
|
c1 = 1
|
||||||
|
|
||||||
|
controller.OutsideCriticalSection(1, 100)
|
||||||
|
|
||||||
|
if controller.ProcessCrashed(0.1) {
|
||||||
|
log.Println("Process 1 crashed")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
goto L1
|
||||||
}
|
}
|
||||||
|
|
||||||
// process2 simulates the behaviour of the second process
|
// process2 simulates the behaviour of the second process
|
||||||
func process2() {
|
func process2() {
|
||||||
// TO DO
|
L2:
|
||||||
|
c2 = 0
|
||||||
|
if c1 == 0 {
|
||||||
|
c2 = 1
|
||||||
|
goto L2
|
||||||
|
}
|
||||||
|
|
||||||
|
controller.EnterCriticalSection(2)
|
||||||
|
controller.InsideCriticalSection(2, 50)
|
||||||
|
controller.LeaveCriticalSection(2)
|
||||||
|
|
||||||
|
c2 = 1
|
||||||
|
|
||||||
|
controller.OutsideCriticalSection(2, 100)
|
||||||
|
|
||||||
|
if controller.ProcessCrashed(0.1) {
|
||||||
|
log.Println("Process 2 crashed")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
goto L2
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,6 +13,11 @@
|
||||||
|
|
||||||
package ewd123dekker
|
package ewd123dekker
|
||||||
|
|
||||||
|
import (
|
||||||
|
"../controller"
|
||||||
|
"log"
|
||||||
|
)
|
||||||
|
|
||||||
// global synchronization variables
|
// global synchronization variables
|
||||||
var c1, c2 = 1, 1
|
var c1, c2 = 1, 1
|
||||||
var turn = 1
|
var turn = 1
|
||||||
|
@ -25,10 +30,71 @@ func Start() {
|
||||||
|
|
||||||
// process1 simulates the behaviour of the first process
|
// process1 simulates the behaviour of the first process
|
||||||
func process1() {
|
func process1() {
|
||||||
// TO DO
|
A1:
|
||||||
|
c1 = 0
|
||||||
|
L1:
|
||||||
|
if c2 == 0 {
|
||||||
|
if turn == 1 {
|
||||||
|
goto L1
|
||||||
|
}
|
||||||
|
c1 = 1
|
||||||
|
|
||||||
|
B1:
|
||||||
|
if turn == 2 {
|
||||||
|
goto B1
|
||||||
|
}
|
||||||
|
goto A1
|
||||||
|
}
|
||||||
|
|
||||||
|
controller.EnterCriticalSection(1)
|
||||||
|
controller.InsideCriticalSection(1, 50)
|
||||||
|
controller.LeaveCriticalSection(1)
|
||||||
|
|
||||||
|
turn = 2
|
||||||
|
c1 = 1
|
||||||
|
|
||||||
|
controller.OutsideCriticalSection(1, 100)
|
||||||
|
|
||||||
|
if controller.ProcessCrashed(0.1) {
|
||||||
|
log.Println("Process 1 crashed")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
goto A1
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// process2 simulates the behaviour of the second process
|
// process2 simulates the behaviour of the second process
|
||||||
func process2() {
|
func process2() {
|
||||||
// TO DO
|
A2:
|
||||||
|
c2 = 0
|
||||||
|
L2:
|
||||||
|
if c1 == 0 {
|
||||||
|
if turn == 2 {
|
||||||
|
goto L2
|
||||||
|
}
|
||||||
|
c2 = 1
|
||||||
|
|
||||||
|
B2:
|
||||||
|
if turn == 1 {
|
||||||
|
goto B2
|
||||||
|
}
|
||||||
|
goto A2
|
||||||
|
}
|
||||||
|
|
||||||
|
controller.EnterCriticalSection(2)
|
||||||
|
controller.InsideCriticalSection(2, 50)
|
||||||
|
controller.LeaveCriticalSection(2)
|
||||||
|
|
||||||
|
turn = 1
|
||||||
|
c2 = 1
|
||||||
|
|
||||||
|
controller.OutsideCriticalSection(2, 100)
|
||||||
|
|
||||||
|
if controller.ProcessCrashed(0.1) {
|
||||||
|
log.Println("Process 2 crashed")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
goto A2
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue