首页 > 解决方案 > RLock 已评估但未使用!为什么会出现这样的错误?

问题描述

为什么会出现这样的错误?使用的代码部分lock如下

func variableModify() {
    m.RLock
    x++
    m.RUnlock
    fmt.Println("modi", x)
    w.Done()
}

整个程序(下)

package main

import (
    "fmt"
    "sync"
)

var m = sync.RWMutex{}
var w = sync.WaitGroup{}
var x = 1

func main() {

    for i := 0; i < 10; i++ {
        w.Add(2)
        go variableReadOnly()

        go variableModify()
    }
    w.Wait()
}

func variableReadOnly() {
    fmt.Println("read", x)
    w.Done()
}
func variableModify() {
    m.RLock
    x++
    m.RUnlock
    fmt.Println("modi", x)
    w.Done()
}

编译错误

./prog.go:28:3: m.RLock evaluated but not used
./prog.go:30:3: m.RUnlock evaluated but not used

游乐场链接

标签: gocompiler-errorsmutex

解决方案


因为RLockandRUnlock是方法,你应该用括号来调用它们。否则,您只是在评估方法的值而不将其分配给任何东西,因此会发出警告。

更正的代码:

func variableModify() {
    m.RLock()
    x++
    m.RUnlock()
    fmt.Println("modi", x)
    w.Done()
}

推荐阅读