Sobes.tech
Middle — Middle+

Чӣ гуна иҷро кардани ҳамоҳангсозии унсурҳои рӯйхати пайвастшуда барои таъмини бехатарии ҷараёнҳо?

sobes.tech AI

Ҷавоб аз AI

Барои таъмини бехатарии ҷараён дар кор бо рӯйхати пайваст дар Go, бояд дастрасиро ба унсурҳои он ҳамоҳангсозӣ кард, то ҳолати рақобат пешгирӣ шавад.

Равишҳои асосӣ:

  • Истифодаи mutex (sync.Mutex ё sync.RWMutex) барои бастани амалиётҳои хондан ва навиштан.
  • Барои баланд бардоштани суръат, метавон структураҳои мураккабтар, масалан, алгоритмҳои бе баст, истифода бурд, аммо ин душвор аст.

Масали бо истифода аз sync.Mutex:

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
}

Инчунин, ҳамаи амалиётҳое, ки рӯйхати тағир медиҳад ё мехонад, бо mutex муҳофизат шудаанд, ки боиси пешгирии муноқишаҳои дастрасӣ дар як вақт мешаванд.