RLock оценивается, но не используется! Почему такая ошибка? - PullRequest
0 голосов
/ 16 апреля 2020

Почему появляется такая ошибка? Часть кода, которая использовала 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

Playground Link

1 Ответ

2 голосов
/ 16 апреля 2020

Поскольку RLock и RUnlock являются методами, и вы должны вызывать их в скобках. В противном случае вы просто оцениваете значение метода, не присваивая его чему-либо, отсюда и предупреждение.

Исправленный код:

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