250621.4 · 247d168af6fabcc322f54ad366f4fb45f781137b
Terminate running background transform on exit
Close #4422
reading declarations
Changes to src/util/concurrent_set.go. All files
@@ -0,0 +1,39 @@+package util++import "sync"++// ConcurrentSet is a thread-safe set implementation.+type ConcurrentSet[T comparable] struct {+ lock sync.RWMutex+ items map[T]struct{}+}++// NewConcurrentSet creates a new ConcurrentSet.+func NewConcurrentSet[T comparable]() *ConcurrentSet[T] {+ return &ConcurrentSet[T]{+ items: make(map[T]struct{}),+ }+}++// Add adds an item to the set.+func (s *ConcurrentSet[T]) Add(item T) {+ s.lock.Lock()+ defer s.lock.Unlock()+ s.items[item] = struct{}{}+}++// Remove removes an item from the set.+func (s *ConcurrentSet[T]) Remove(item T) {+ s.lock.Lock()+ defer s.lock.Unlock()+ delete(s.items, item)+}++// ForEach iterates over each item in the set and applies the provided function.+func (s *ConcurrentSet[T]) ForEach(fn func(item T)) {+ s.lock.RLock()+ defer s.lock.RUnlock()+ for item := range s.items {+ fn(item)+ }+}