Skip to content

Instantly share code, notes, and snippets.

@fujim2
Created January 18, 2020 08:03
Show Gist options
  • Save fujim2/c8fb07463f2da7168720d363b0f47b5c to your computer and use it in GitHub Desktop.
Save fujim2/c8fb07463f2da7168720d363b0f47b5c to your computer and use it in GitHub Desktop.
var Thread0inside = 0;
var Thread1inside = 0;
ThreadZero() =
[!(Thread1inside == 1)]
T0Start
->CriticalSectionZero{Thread0inside = 1}
->T0End{Thread0inside = 0}
->OtherStuffZero
->ThreadZero();
ThreadOne() =
[!(Thread0inside == 1)]
T1Start
->CriticalSectionOne{Thread1inside = 1}
->T1End{Thread1inside = 0}
->OtherStuffOne
->ThreadOne();
System = ThreadZero() || ThreadOne();
#assert System deadlockfree;
#define badstatus (Thread0inside==1 && Thread1inside == 1);
#assert System reaches badstatus;
package main
import "fmt"
import "time"
var Thread0inside int = 0;
var Thread1inside int = 0;
func ThreadZero() {
for i:=0; i<10; i++{
for Thread1inside == 1 {}
//time.Sleep(time.Nanosecond)
Thread0inside = 1;
CriticalSectionZero()
Thread0inside = 0;
OtherStuffZero();
}
}
func ThreadOne() {
for i:=0; i<10; i++{
for Thread0inside == 1 {}
//time.Sleep(time.Nanosecond)
Thread1inside = 1;
CriticalSectionOne()
Thread1inside = 0;
OtherStuffOne();
}
}
func CriticalSectionZero() {
for r:=0; r<5;r++ {
fmt.Printf("CriticalSectionZero(%d)\n", r)
time.Sleep(100*time.Millisecond)
}
}
func CriticalSectionOne() {
for r:=0; r<5;r++ {
fmt.Printf(" CriticalSectionOne(%d)\n", r)
time.Sleep(100*time.Millisecond)
}
}
func OtherStuffZero() {
fmt.Printf("OtherStuffZero\n")
}
func OtherStuffOne() {
fmt.Printf(" OtherStuffOne\n")
}
func main() {
go ThreadOne()
go ThreadZero()
time.Sleep(10000*time.Millisecond)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment