lc-go/solutions/12/q1226/solution.go

40 lines
641 B
Go

// Package q1226 implements a solution for https://leetcode.com/problems/the-dining-philosophers/
package q1226
import "sync"
var (
pick = sync.Mutex{}
forks = [5]sync.Mutex{}
)
type DiningPhilosophers struct {
}
func (p *DiningPhilosophers) wantsToEat(
philosopher int,
pickLeftFork func(),
pickRightFork func(),
eat func(),
putLeftFork func(),
putRightFork func(),
) {
l, r := &forks[philosopher], &forks[(philosopher+1)%5]
pick.Lock()
l.Lock()
r.Lock()
pick.Unlock()
pickLeftFork()
pickRightFork()
eat()
putLeftFork()
l.Unlock()
putRightFork()
r.Unlock()
}
var _t = DiningPhilosophers{}
var _ = _t.wantsToEat