MST

星途 面试题库

面试题:Go语言中自定义整型类型及在并发场景下的整型数据处理

在Go语言中如何自定义一个新的整型类型?并基于此自定义类型,设计一个在并发场景下,多个协程安全读写该整型数据的方案,说明使用到的并发控制机制及原理。
45.8万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

在Go语言中,可以使用 type 关键字自定义新的整型类型,示例如下:

type MyInt int

为了在并发场景下安全读写该自定义整型数据,可以使用 sync.Mutex 来实现。以下是一个示例代码:

package main

import (
    "fmt"
    "sync"
)

type MyInt int

type SafeMyInt struct {
    value MyInt
    mutex sync.Mutex
}

func (s *SafeMyInt) Get() MyInt {
    s.mutex.Lock()
    defer s.mutex.Unlock()
    return s.value
}

func (s *SafeMyInt) Set(v MyInt) {
    s.mutex.Lock()
    defer s.mutex.Unlock()
    s.value = v
}

这里使用到的并发控制机制是 sync.Mutex,其原理是通过互斥锁来保证同一时间只有一个协程能够访问被保护的数据。Lock 方法用来获取锁,如果锁已被占用,当前协程会阻塞直到锁可用。Unlock 方法用来释放锁,允许其他协程获取锁并访问数据。在 GetSet 方法中,通过在操作前后分别调用 LockUnlock,确保对 MyInt 类型数据的读写操作是线程安全的。