A-Tune/common/utils/lock.go
Zhipeng Xie 4335408875 atune: init code
upload code to gitee

Signed-off-by: Zhipeng Xie <xiezhipeng1@huawei.com>
2019-11-13 17:14:15 +08:00

52 lines
1.2 KiB
Go

/*
* Copyright (c) 2019 Huawei Technologies Co., Ltd.
* A-Tune is licensed under the Mulan PSL v1.
* You can use this software according to the terms and conditions of the Mulan PSL v1.
* You may obtain a copy of Mulan PSL v1 at:
* http://license.coscl.org.cn/MulanPSL
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
* PURPOSE.
* See the Mulan PSL v1 for more details.
* Create: 2019-10-29
*/
package utils
import (
"sync/atomic"
)
const (
locked int32 = 1
)
// MutexLock : the type implement the TryLock function
type MutexLock struct {
state int32
}
// TryLock method if get the lock success, otherwise return false
func (m *MutexLock) TryLock() bool {
if !atomic.CompareAndSwapInt32(&m.state, 0, 1) {
return false
}
return true
}
// Unlock method unlock lock flag
func (m *MutexLock) Unlock() {
atomic.CompareAndSwapInt32(&m.state, 1, 0)
}
// IsLocked method return wether the lock is already locked
func (m *MutexLock) IsLocked() bool {
if atomic.LoadInt32(&m.state) == locked {
return true
}
return false
}