MUUTEX
🐄 LOW-LEVEL BACKEND // HIGH-LEVEL MOO 🐄
func main() { lock(); moo(); unlock(); }
[ acquire_lock() ]// INIT
whoami
Muutex to niskopoziomowe studio backendowe, którego nazwa pochodzi od dwóch świętych rzeczy: muczenia krów i sync.Mutex. Nie jest to przypadek. To filozofia.
Specjalizujemy się w serwerach gier MMO, systemach rozproszonych i wszędzie tam, gdzie race condition oznacza koniec świata (albo przynajmniej koniec kampanii PvP).
Piszemy w Go dopóki kernel nie zapłacze. Debugujemy w C++. Nocami czytamy źródła Linuxa dla rozrywki. Nasze goroutines są poprawnie zsynchronizowane. Nasze krowy — nakarmione.
// DEPENDENCIES
tech stack
// PRODUCTION CODE (REAL, NIE KŁAMIEMY)
the core algorithm
package main import ( "fmt" "sync" "sync/atomic" "time" ) // Herd jest thread-safe kolekcją zsynchronizowanych krów. // Race condition w krowiarni = katastrofa. Nauczyliśmy się tego. type Herd struct { mu sync.RWMutex cows []string mooCount atomic.Int64 } // Moo — najbardziej krytyczna logika biznesowa w całej firmie. func (h *Herd) Moo(name string) { h.mu.Lock() defer h.mu.Unlock() h.cows = append(h.cows, name) h.mooCount.Add(1) fmt.Printf("🐄 [%s] MUU... lock acquired — total_cows=%d\n", name, len(h.cows)) } func (h *Herd) Stats() (int, int64) { h.mu.RLock() defer h.mu.RUnlock() return len(h.cows), h.mooCount.Load() } func main() { herd := &Herd{} var wg sync.WaitGroup cowboys := []string{ "Bessie", "Łaciata", "Mutex-7", "goroutine-cow", "ConcurrentBull", "RaceCondition404", "nil-moo", } for _, name := range cowboys { wg.Add(1) go func(n string) { defer wg.Done() time.Sleep(time.Duration(n[0]) * time.Millisecond) herd.Moo(n) }(name) } wg.Wait() cows, moos := herd.Stats() fmt.Printf("\n✅ cows=%d moos=%d race_conditions=0\n", cows, moos) fmt.Println("The mutex was acquired. The cow was freed. 🐄") }
// LIVE DEMO — nie, serio, to działa
semaphore visualizer
Semafor z capacity=4. Goroutines losowo go zajmują i zwalniają. To właśnie robimy dla relaksu w piątki.
// OPEN CHANNEL