Sobes.tech
Middle — Middle+

Wie implementiert man die Synchronisierung von Elementen in einer verketteten Liste, um die Thread-Sicherheit zu gewährleisten?

sobes.tech KI

Antwort von AI

Um Go'da bağlı liste ile çalışırken akış güvenliğini sağlamak için, yarış durumlarını önlemek amacıyla öğelerine erişimi senkronize etmek gerekir.

Ana yaklaşımlar:

  • Okuma ve yazma işlemlerini kilitlemek için mutex (sync.Mutex veya sync.RWMutex) kullanmak.
  • Yüksek performans gerekiyorsa, lock-free algoritmalar gibi daha karmaşık yapılar kullanılabilir, ancak bu daha zordur.

sync.Mutex kullanımıyla örnek:

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
}

Bu şekilde, listeyi değiştiren veya okuyan tüm işlemler mutex ile korunur, böylece eşzamanlı erişim çatışmaları önlenir.