golang 一种并发安全 map 的实现

在 Go 语言的并发编程场景中,标准库中的map类型并不是并发安全的。当多个 goroutine 同时对map进行读写操作时,很容易引发竞态条件(race condition),导致程序出现不可预测的错误。为了解决这一问题,我们可以通过自定义结构体,结合读写锁来实现一个并发安全的map,本文就来详细介绍一种安全map的实现方法。​

代码实现​

Go 复制代码
package main

import (
	"sync"
)

type safeMap struct {
	lock *sync.RWMutex
	sm   map[interface{}]interface{}
}

func newSafeMap() *safeMap {
	return &safeMap{
		lock: new(sync.RWMutex),
		sm:   make(map[interface{}]interface{}),
	}
}

func (m *safeMap) Get(k interface{}) interface{} {
	m.lock.RLock()
	defer m.lock.RUnlock()
	if val, ok := m.sm[k]; ok {
		return val
	}
	return nil
}

func (m *safeMap) Set(k interface{}, v interface{}) bool {
	m.lock.Lock()
	defer m.lock.Unlock()
	if val, ok := m.sm[k]; !ok {
		m.sm[k] = v
	} else if val != v {
		m.sm[k] = v
	} else {
		return false
	}
	return true
}

func (m *safeMap) Check(k interface{}) bool {
	m.lock.RLock()
	defer m.lock.RUnlock()
	if _, ok := m.sm[k]; !ok {
		return false
	}
	return true
}

func (m *safeMap) Delete(k interface{}) {
	m.lock.Lock()
	defer m.lock.Unlock()
	delete(m.sm, k)
}
相关推荐
Iruoyaoxh15 小时前
栈和队列~
java·开发语言
Hrain-AI16 小时前
2026 企业 AI 编程智能体实战:Codex 与 Claude Code
开发语言·人工智能·kotlin
wdfk_prog16 小时前
嵌入式面试真题第 13 题:单硬件 Timer 下的高精度多路软件定时器架构设计
c语言·开发语言·面试·职场和发展·嵌入式
oort12316 小时前
吃上了自家的细糠,还挺丝滑,用起来手感还行,OortCloud发布新版AI编程平台,下载 OortCodex,Token多,免费薅
大数据·开发语言·人工智能·ai编程
slandarer16 小时前
MATLAB | 泰勒图绘制,支持各种角度范围
开发语言·数学建模·matlab·nature·顶刊·泰勒图
mct12317 小时前
c++ iconv 字符utf-8转换gb2312失败
开发语言·c++
Marst Code18 小时前
Python 3.9 已停止维护!从 3.9 到 3.14 全版本深度对比,生产环境该选哪个?
开发语言·python
llwszx18 小时前
【Java/Go后端手撸原生Agent(第九篇):Plan-and-Execute规划模式——从“走一步看一步“到“先谋后动“】
java·python·golang·agent开发·plan模式·规划执行模式
ZJH__GO18 小时前
网络编程v2--多客户端互通
java·运维·服务器·开发语言·计算机网络
万岳科技系统开发19 小时前
智慧医院小程序开发推动医疗服务流程全面线上化
大数据·开发语言·人工智能