• Задача
  • Решение
  • Обсуждение

Страж единственной двери

В этой задаче вам предстоит создать собственный mutex, используя только каналы Go.

На первый взгляд всё просто: один поток входит в критическую секцию, остальные ждут. Но правильная работа такого mutex требует точного контроля доступа.

Ваша задача — реализовать локер, который гарантирует, что внутрь одновременно попадает не более одного участника.

go

package main

import “time”

type Locker interface {
Lock()
Unlock()
}

type CustomMutex struct {
ch chan struct{}
}

func (c *CustomMutex) Lock() {
c.ch <- struct{}{} } func (c *CustomMutex) Unlock() { <-c.ch } func NewLocker() Locker { return &CustomMutex{ ch: make(chan struct{}, 1), } }

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *

00:00:00