Middle — Middle+
Əlaqəli siyahının elementlərinin sinxronizasiyasını necə həyata keçirmək və bu, çox iş parçacığı təhlükəsizliyini necə təmin edir?
sobes.tech Süni İntellekt
AI-dan cavab
Go-da əlaqəli siyahı ilə işləyərkən, yarış vəziyyətlərinin qarşısını almaq üçün onun elementlərinə giriş sinxronlaşdırılmalıdır.
Əsas yanaşmalar:
- Oxuma və yazma əməliyyatlarını kilidləmək üçün mutex (
sync.Mutexvə yasync.RWMutex) istifadə etmək. - Yüksək performans üçün, lock-free alqoritmlər kimi daha mürəkkəb strukturlar istifadə oluna bilər, amma bu daha çətindir.
sync.Mutex istifadə edən nümunə:
import "sync"
type Node struct {
value int
next *Node
}
type LinkedList struct {
head *Node
mu sync.Mutex
}
func (l *LinkedList) Add(value int) {
l.mu.Lock()
defer l.mu.Unlock()
newNode := &Node{value: value}
if l.head == nil {
l.head = newNode
return
}
current := l.head
for current.next != nil {
current = current.next
}
current.next = newNode
}
func (l *LinkedList) GetAll() []int {
l.mu.Lock()
defer l.mu.Unlock()
var values []int
current := l.head
for current != nil {
values = append(values, current.value)
current = current.next
}
return values
}
Beləliklə, siyahını dəyişdirən və ya oxuyan bütün əməliyyatlar mutex ilə qorunur, bu da eyni vaxtda girişin qarşısını alır.