github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/lang/fork_management.go (about) 1 package lang 2 3 import ( 4 "sync" 5 "time" 6 ) 7 8 type ForkManagement struct { 9 forks map[int64]*[]Process 10 mutex sync.Mutex 11 } 12 13 func NewForkManagement() *ForkManagement { 14 fm := new(ForkManagement) 15 fm.forks = make(map[int64]*[]Process) 16 17 return fm 18 } 19 20 func (fm *ForkManagement) add(procs *[]Process) (id int64) { 21 fm.mutex.Lock() 22 23 getId: 24 id = time.Now().UnixMicro() 25 if fm.forks[id] != nil { 26 goto getId 27 } 28 29 fm.forks[id] = procs 30 31 fm.mutex.Unlock() 32 return 33 } 34 35 func (fm *ForkManagement) delete(id int64) { 36 fm.mutex.Lock() 37 delete(fm.forks, id) 38 fm.mutex.Unlock() 39 } 40 41 func (fm *ForkManagement) GetForks() []*[]Process { 42 fm.mutex.Lock() 43 44 forks := make([]*[]Process, len(fm.forks)) 45 var i int 46 for _, procs := range fm.forks { 47 forks[i] = procs 48 i++ 49 } 50 fm.mutex.Unlock() 51 52 return forks 53 }