수색…


뮤텍스 잠금

Go에서 Mutex 잠금을 사용하면 한 번에 하나의 goroutine 만 잠글 수 있습니다.

import "sync"

func mutexTest() {
    lock := sync.Mutex{}
    go func(m *sync.Mutex) {
        m.Lock()
        defer m.Unlock()   // Automatically unlock when this function returns
        // Do some things
    }(&lock)

    lock.Lock()
    // Do some other things
    lock.Unlock()
}

Mutex 사용하면 동일한 리소스에서 작동하는 여러 동시 루틴과 관련된 경쟁 조건, 동시 수정 및 기타 문제를 피할 수 있습니다. Mutex.Unlock() 은 잠금 기능이있는 루틴뿐만 아니라 모든 루틴에서 실행할 수 있습니다. 또한 다른 루틴이 잠금을 유지하면 Mutex.Lock() 대한 호출이 실패하지 않습니다. 자물쇠가 풀릴 때까지 차단됩니다.

팁 : 뮤텍스 변수를 함수에 전달할 때마다 항상 포인터로 전달하십시오. 그렇지 않으면 뮤텍스의 목적에 위배되는 변수의 복사본이 생성됩니다. 이전 Go 버전 (<1.7)을 사용하는 경우 컴파일러는이 실수에 대해 경고하지 않습니다!



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow