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  }