溫馨提示×

Go中如何遍歷并發訪問安全的數據結構

go
小億
95
2024-04-03 09:57:58
欄目: 編程語言

在Go中,可以使用通道(channel)來實現并發訪問安全的數據結構。通過在數據結構上使用互斥鎖(mutex)或讀寫鎖(RWMutex),可以確保在并發訪問時數據結構的一致性。以下是一個使用互斥鎖來實現安全并發訪問的示例:

package main

import (
    "sync"
)

type SafeMap struct {
    mu    sync.Mutex
    items map[string]string
}

func NewSafeMap() *SafeMap {
    return &SafeMap{
        items: make(map[string]string),
    }
}

func (sm *SafeMap) Set(key, value string) {
    sm.mu.Lock()
    defer sm.mu.Unlock()
    sm.items[key] = value
}

func (sm *SafeMap) Get(key string) (string, bool) {
    sm.mu.Lock()
    defer sm.mu.Unlock()
    value, ok := sm.items[key]
    return value, ok
}

func main() {
    sm := NewSafeMap()

    go func() {
        sm.Set("key1", "value1")
    }()

    go func() {
        value, ok := sm.Get("key1")
        if ok {
            println(value)
        }
    }()

    // Wait for goroutines to finish
    select {}
}

在這個示例中,我們定義了一個SafeMap類型,該類型包含一個互斥鎖和一個字符串鍵值對的map。通過在Set和Get方法中使用互斥鎖,我們確保在并發訪問時數據結構的一致性。在main函數中,我們啟動兩個goroutine來并發地設置和獲取數據,并通過互斥鎖保證安全性。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女