GOLANG_INTERVIEW Telegram 1268
🔧 Задача для собеседования на Go: Реализация кастомной WaitGroup на семафоре

Условие:
Нужно реализовать аналог sync.WaitGroup с использованием семафора на базе канала. Семафор должен ожидать завершения N горутин, используя минимальные аллокации памяти.

Решение:
package main

import (
"fmt"
)

type sema chan struct{}

func New(n int) sema {
return make(sema, n)
}

func (s sema) Inc(k int) {
for i := 0; i < k; i++ {
s <- struct{}{}
}
}

func (s sema) Dec(k int) {
for i := 0; i < k; i++ {
<-s
}
}

func main() {
numbers := []int{1, 2, 3, 4, 5}
n := len(numbers)

sem := New(n)

for _, num := range numbers {
go func(n int) {
fmt.Println(n)
sem.Inc(1)
}(num)
}

sem.Dec(n)
}


Пояснение:
1️⃣ Семафор реализован как канал пустых структур chan struct{} для минимизации аллокаций
2️⃣ Буферизированный канал создается с размером, равным количеству горутин
3️⃣ Каждая горутина при завершении кладет значение в канал (Inc)
4️⃣ Главная горутина ожидает завершения всех горутин, вычитывая значения (Dec)
5️⃣ Когда все горутины завершатся, канал опустеет и выполнение продолжится

@golang_interview
13👍6🔥5🌚1



tgoop.com/golang_interview/1268
Create:
Last Update:

🔧 Задача для собеседования на Go: Реализация кастомной WaitGroup на семафоре

Условие:
Нужно реализовать аналог sync.WaitGroup с использованием семафора на базе канала. Семафор должен ожидать завершения N горутин, используя минимальные аллокации памяти.

Решение:

package main

import (
"fmt"
)

type sema chan struct{}

func New(n int) sema {
return make(sema, n)
}

func (s sema) Inc(k int) {
for i := 0; i < k; i++ {
s <- struct{}{}
}
}

func (s sema) Dec(k int) {
for i := 0; i < k; i++ {
<-s
}
}

func main() {
numbers := []int{1, 2, 3, 4, 5}
n := len(numbers)

sem := New(n)

for _, num := range numbers {
go func(n int) {
fmt.Println(n)
sem.Inc(1)
}(num)
}

sem.Dec(n)
}


Пояснение:
1️⃣ Семафор реализован как канал пустых структур chan struct{} для минимизации аллокаций
2️⃣ Буферизированный канал создается с размером, равным количеству горутин
3️⃣ Каждая горутина при завершении кладет значение в канал (Inc)
4️⃣ Главная горутина ожидает завершения всех горутин, вычитывая значения (Dec)
5️⃣ Когда все горутины завершатся, канал опустеет и выполнение продолжится

@golang_interview

BY Golang вопросы собеседований


Share with your friend now:
tgoop.com/golang_interview/1268

View MORE
Open in Telegram


Telegram News

Date: |

In handing down the sentence yesterday, deputy judge Peter Hui Shiu-keung of the district court said that even if Ng did not post the messages, he cannot shirk responsibility as the owner and administrator of such a big group for allowing these messages that incite illegal behaviors to exist. With Bitcoin down 30% in the past week, some crypto traders have taken to Telegram to “voice” their feelings. Telegram Android app: Open the chats list, click the menu icon and select “New Channel.” To view your bio, click the Menu icon and select “View channel info.” The SUCK Channel on Telegram, with a message saying some content has been removed by the police. Photo: Telegram screenshot.
from us


Telegram Golang вопросы собеседований
FROM American