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.Mutexveyasync.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.