日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
創(chuàng)新互聯(lián)GoFrame教程:GoFrame內(nèi)存鎖-gmlock

內(nèi)存鎖模塊,也稱之為動態(tài)互斥鎖模塊,支持按照給定鍵名動態(tài)生成互斥鎖,并發(fā)安全并支持?Try*Lock?特性。

當維護大量動態(tài)互斥鎖的場景時,如果不再使用的互斥鎖對象,請手動調(diào)用?Remove?方法刪除掉。

使用方式:

import "github.com/GOgf/gf/v2/os/gmlock"

使用場景: 需要動態(tài)創(chuàng)建互斥鎖,或者需要維護大量動態(tài)鎖的場景;

接口文檔:https://pkg.go.dev/github.com/gogf/gf/v2/os/gmlock

func Lock(key string)
func LockFunc(key string, f func())
func RLock(key string)
func RLockFunc(key string, f func())
func RUnlock(key string)
func Remove(key string)
func TryLock(key string) bool
func TryLockFunc(key string, f func()) bool
func TryRLock(key string) bool
func TryRLockFunc(key string, f func()) bool
func Unlock(key string)
type Locker
    func New() *Locker
    func (l *Locker) Clear()
    func (l *Locker) Lock(key string)
    func (l *Locker) LockFunc(key string, f func())
    func (l *Locker) RLock(key string)
    func (l *Locker) RLockFunc(key string, f func())
    func (l *Locker) RUnlock(key string)
    func (l *Locker) Remove(key string)
    func (l *Locker) TryLock(key string) bool
    func (l *Locker) TryLockFunc(key string, f func()) bool
    func (l *Locker) TryRLock(key string) bool
    func (l *Locker) TryRLockFunc(key string, f func()) bool
    func (l *Locker) Unlock(key string)

示例1,基本使用

package main

import (
    "time"
    "sync"
    "github.com/gogf/gf/v2/os/glog"
    "github.com/gogf/gf/v2/os/gmlock"
)

func main() {
    key := "lock"
    wg  := sync.WaitGroup{}
    for i := 0; i < 10; i++ {
        wg.Add(1)
        go func(i int) {
            gmlock.Lock(key)
            glog.Println(i)
            time.Sleep(time.Second)
            gmlock.Unlock(key)
            wg.Done()
        }(i)
    }
    wg.Wait()
}

該示例中,模擬了同時開啟10個?goroutine?,但同一時刻只能有一個?goroutine?獲得鎖,獲得鎖的?goroutine?執(zhí)行1秒后退出,其他?goroutine?才能獲得鎖。

執(zhí)行后,輸出結(jié)果為:

2018-10-15 23:57:28.295 9
2018-10-15 23:57:29.296 0
2018-10-15 23:57:30.296 1
2018-10-15 23:57:31.296 2
2018-10-15 23:57:32.296 3
2018-10-15 23:57:33.297 4
2018-10-15 23:57:34.297 5
2018-10-15 23:57:35.297 6
2018-10-15 23:57:36.298 7
2018-10-15 23:57:37.298 8

示例2,TryLock非阻塞鎖

?TryLock?方法是有返回值的,它表示用來嘗試獲取鎖,如果獲取成功,則返回?true?;如果獲取失?。椿コ怄i已被其他?goroutine?獲?。?,則返回?false?。

package main

import (
    "sync"
    "github.com/gogf/gf/v2/os/glog"
    "time"
    "github.com/gogf/gf/v2/os/gmlock"
)

func main() {
    key := "lock"
    wg  := sync.WaitGroup{}
    for i := 0; i < 10; i++ {
        wg.Add(1)
        go func(i int) {
            if gmlock.TryLock(key) {
                glog.Println(i)
                time.Sleep(time.Second)
                gmlock.Unlock(key)
            } else {
                glog.Println(false)
            }
            wg.Done()
        }(i)
    }
    wg.Wait()
}

同理,在該示例中,同時也只有1個?goroutine?能獲得鎖,其他?goroutine?在?TryLock?失敗便直接退出了。

執(zhí)行后,輸出結(jié)果為:

2018-10-16 00:01:59.172 9
2018-10-16 00:01:59.172 false
2018-10-16 00:01:59.172 false
2018-10-16 00:01:59.172 false
2018-10-16 00:01:59.172 false
2018-10-16 00:01:59.172 false
2018-10-16 00:01:59.172 false
2018-10-16 00:01:59.172 false
2018-10-16 00:01:59.172 false
2018-10-16 00:01:59.176 false

文章名稱:創(chuàng)新互聯(lián)GoFrame教程:GoFrame內(nèi)存鎖-gmlock
網(wǎng)頁路徑:http://www.dlmjj.cn/article/cooiggg.html