成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > swoole鎖的機制代碼實例講解

swoole鎖的機制代碼實例講解

熱門標(biāo)簽:地圖標(biāo)注平臺怎么給錢注冊 新河科技智能外呼系統(tǒng)怎么樣 福州人工外呼系統(tǒng)哪家強 常州地圖標(biāo)注服務(wù)商 百度商鋪地圖標(biāo)注 安裝電銷外呼系統(tǒng) 釘釘打卡地圖標(biāo)注 衡水外呼系統(tǒng)平臺 注冊400電話申請

鎖,這個詞我們并不陌生,主要的應(yīng)用場景會發(fā)生在高并發(fā)下進(jìn)行鎖。今天的這篇文章咱們主要來講解一下swoole的鎖的機制,swoole_lock是如何實現(xiàn)的。

swoole_lock類支持5種鎖的類型:

  • 文件鎖 SWOOLE_FILELOCK
  • 讀寫鎖 SWOOLE_RWLOCK
  • 信號量 SWOOLE_SEM
  • 互斥鎖 SWOOLE_MUTEX
  • 自旋鎖 SWOOLE_SPINLOCK

創(chuàng)建這些鎖的過程其實就是調(diào)用構(gòu)造函數(shù)的過程,調(diào)用的形式如下:

swoole_lock->__construct(int $type, [string $lockfile])

$type為鎖的類型

$lockfile,當(dāng)類型為SWOOLE_FILELOCK時必須傳入,指定文件鎖的路徑

下面我們介紹下這個鎖的實現(xiàn)

static PHP_METHOD(swoole_lock, __construct)
{
    long type = SW_MUTEX;
    char *filelock;
    zend_size_t filelock_len = 0;
    int ret;
    //解析輸入?yún)?shù),這里輸入?yún)?shù)有2個,其中type表示鎖的類型,另外個參數(shù)是文件鎖時必須傳入(表示文件鎖對應(yīng)的文件路徑),其他鎖時,不需要這個參數(shù)
    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|ls", type, filelock, filelock_len) == FAILURE)
    {
        RETURN_FALSE;
    }
    //從內(nèi)存池申請鎖對象空間,這里僅僅是申請鎖空間
    swLock *lock = SwooleG.memory_pool->alloc(SwooleG.memory_pool, sizeof(swLock));
    if (lock == NULL)//申請空間失敗
    {
        zend_throw_exception(swoole_exception_class_entry_ptr, "global memory allocation failure.", SW_ERROR_MALLOC_FAIL TSRMLS_CC);
        RETURN_FALSE;
    }
 
    switch(type)//按type遍歷,創(chuàng)建鎖對象
    {
#ifdef HAVE_RWLOCK
    case SW_RWLOCK://如果是讀寫鎖
        ret = swRWLock_create(lock, 1);//創(chuàng)建鎖對象,類型為讀寫鎖
        break;
#endif
    case SW_FILELOCK://如果是文件鎖
        if (filelock_len = 0)//第二個參數(shù)有效性檢查
        {
            zend_throw_exception(swoole_exception_class_entry_ptr, "filelock requires file name of the lock.", SW_ERROR_INVALID_PARAMS TSRMLS_CC);
            RETURN_FALSE;
        }
        int fd;
        if ((fd = open(filelock, O_RDWR | O_CREAT, 0666))  0) //調(diào)用linux函數(shù)open,打開文件(不存在則創(chuàng)建)
        {
            zend_throw_exception_ex(swoole_exception_class_entry_ptr, errno TSRMLS_CC, "open file[%s] failed. Error: %s [%d]", filelock, strerror(errno), errno);
            RETURN_FALSE;
        }
        ret = swFileLock_create(lock, fd);//創(chuàng)建鎖對象,類型為文件鎖
        break;
    case SW_SEM:
        ret = swSem_create(lock, IPC_PRIVATE);//創(chuàng)建鎖對象,類型為信號量
        break;
#ifdef HAVE_SPINLOCK
    case SW_SPINLOCK:
        ret = swSpinLock_create(lock, 1);//創(chuàng)建鎖對象,類型為樂觀鎖
        break;
#endif
    case SW_MUTEX:
    default:
        ret = swMutex_create(lock, 1);//創(chuàng)建鎖對象,類型為互斥量
        break;
    }
    if (ret  0)
    {
        zend_throw_exception(swoole_exception_class_entry_ptr, "failed to create lock.", errno TSRMLS_CC);
        RETURN_FALSE;
    }
    swoole_set_object(getThis(), lock);//PHP側(cè)的對象和swoole內(nèi)部對象關(guān)聯(lián)
    RETURN_TRUE;
}

以下分別介紹下各個不同鎖對象的創(chuàng)建過程。

1、讀寫鎖

int swRWLock_create(swLock *lock, int use_in_process)
{
    int ret;
    bzero(lock, sizeof(swLock));//鎖空間初始化
    lock->type = SW_RWLOCK;//設(shè)置鎖的類型為讀寫鎖
    pthread_rwlockattr_init(lock->object.rwlock.attr);//linux函數(shù),鎖屬性信息初始化
    if (use_in_process == 1)//標(biāo)記為在進(jìn)程中使用,這里pthread開頭的linux函數(shù)默認(rèn)都是針對線程的
    {
        //設(shè)置鎖的屬性信息,標(biāo)記為在進(jìn)程中使用
        pthread_rwlockattr_setpshared(lock->object.rwlock.attr, PTHREAD_PROCESS_SHARED);
    }
 
    if ((ret = pthread_rwlock_init(lock->object.rwlock._lock, lock->object.rwlock.attr))  0)//linux函數(shù),鎖信息初始化
    {
        return SW_ERR;
    }
 
    /*
     * 設(shè)置鎖的回調(diào)函數(shù)
     */
    lock->lock_rd = swRWLock_lock_rd;
    lock->lock = swRWLock_lock_rw;
    lock->unlock = swRWLock_unlock;
    lock->trylock = swRWLock_trylock_rw;
    lock->trylock_rd = swRWLock_trylock_rd;
    lock->free = swRWLock_free;
    return SW_OK;
}
 
 

2、文件鎖。

int swFileLock_create(swLock *lock, int fd)
{
    bzero(lock, sizeof(swLock));//鎖對象信息初始化
    lock->type = SW_FILELOCK;//設(shè)置鎖的類型為文件鎖
 
    /*
     * 設(shè)置鎖的回調(diào)函數(shù)
     */
    lock->object.filelock.fd = fd;
    lock->lock_rd = swFileLock_lock_rd;
    lock->lock = swFileLock_lock_rw;
    lock->trylock_rd = swFileLock_trylock_rd;
    lock->trylock = swFileLock_trylock_rw;
    lock->unlock = swFileLock_unlock;
    lock->free = swFileLock_free;
    return 0;
}

3、信號量鎖

int swSem_create(swLock *lock, key_t key)
{
    int ret;
    lock->type = SW_SEM;//設(shè)置鎖類型為信號量鎖
    if ((ret = semget(key, 1, IPC_CREAT | 0666))  0)//創(chuàng)建信號量,這里設(shè)置的屬性IPC_CREAT,這表示這種信號量只能用于有親緣關(guān)系的進(jìn)程間
    {
        return SW_ERR;
    }
 
    if (semctl(ret, 0, SETVAL, 1) == -1)//設(shè)置信號量ret的值為1
    {
        swWarn("semctl(SETVAL) failed");
        return SW_ERR;
    }
    lock->object.sem.semid = ret;//設(shè)置信號量ID
 
    /*
     * 設(shè)置回調(diào)函數(shù)
     */
    lock->lock = swSem_lock;
    lock->unlock = swSem_unlock;
    lock->free = swSem_free;
 
    return SW_OK;
}
 
 

4、樂觀鎖

int swSpinLock_create(swLock *lock, int use_in_process)
{
    int ret;
    bzero(lock, sizeof(swLock));//初始化鎖對象
    lock->type = SW_SPINLOCK;//設(shè)置鎖的類型為樂觀鎖
    //執(zhí)行鎖的初始化操作,這里指明是在多進(jìn)程中使用
    if ((ret = pthread_spin_init(lock->object.spinlock.lock_t, use_in_process))  0)
    {
        return -1;
    }
 
    /*
     * 設(shè)置回調(diào)函數(shù)信息
     */
    lock->lock = swSpinLock_lock;
    lock->unlock = swSpinLock_unlock;
    lock->trylock = swSpinLock_trylock;
    lock->free = swSpinLock_free;
    return 0;
}

5、互斥量鎖

int swMutex_create(swLock *lock, int use_in_process)
{
    int ret;
    bzero(lock, sizeof(swLock));
    lock->type = SW_MUTEX;
    pthread_mutexattr_init(lock->object.mutex.attr);
    if (use_in_process == 1)
    {
        pthread_mutexattr_setpshared(lock->object.mutex.attr, PTHREAD_PROCESS_SHARED);
    }
    if ((ret = pthread_mutex_init(lock->object.mutex._lock, lock->object.mutex.attr))  0)
    {
        return SW_ERR;
    }
    lock->lock = swMutex_lock;
    lock->unlock = swMutex_unlock;
    lock->trylock = swMutex_trylock;
    lock->free = swMutex_free;
    return SW_OK;
}

到此這篇關(guān)于swoole鎖的機制代碼實例講解的文章就介紹到這了,更多相關(guān)swoole鎖的機制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 詳解PHP Swoole與TCP三次握手
  • Swoole擴展的6種模式深入詳解
  • php中Swoole的熱更新實現(xiàn)代碼實例
  • windows系統(tǒng)php環(huán)境安裝swoole具體步驟
  • linux系統(tǒng)虛擬主機開啟支持Swoole Loader擴展的方法
  • Swoole源碼中如何查詢Websocket的連接問題詳解
  • 在Windows系統(tǒng)上安裝Cygwin搭建Swoole測試環(huán)境的圖文教程
  • php使用goto實現(xiàn)自動重啟swoole、reactphp、workerman服務(wù)的代碼
  • Centos7安裝swoole擴展操作示例
  • 詳解Swoole TCP流數(shù)據(jù)邊界問題解決方案

標(biāo)簽:唐山 柳州 克拉瑪依 遼陽 白城 鷹潭 鶴崗 六安

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《swoole鎖的機制代碼實例講解》,本文關(guān)鍵詞  swoole,鎖,的,機制,代碼,實例,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《swoole鎖的機制代碼實例講解》相關(guān)的同類信息!
  • 本頁收集關(guān)于swoole鎖的機制代碼實例講解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    青青久久av北条麻妃海外网| 不卡影院一区二区| 婷婷丁香激情五月| 欧美一区二区福利在线| 日韩三级电影视频| 国产大片中文字幕| 色综合狠狠操| www日韩av| 欧美高清xxxxxkkkkk| 蜜臀久久99精品久久久无需会员| 国内精品视频一区| 免费观看亚洲视频| 天堂成人在线视频| 高清欧美一区二区三区| 影音av在线| 欧美一区二区三区……| 可以直接看的黄色网址| 一区二区免费在线播放| 深夜免费福利视频| 国产在线高清精品| 亚洲高清在线| 国产一级大片免费看| 这里只有视频精品| 最近中文字幕免费mv2018在线| 亚洲精品视频一区| 国产精品理论在线| 久久中文字幕电影| 黄色动漫网站| 欧美精品黑人性xxxx| 中文字幕日韩专区| 免费在线一区二区三区| 日韩欧美第二区在线观看| 91精品国产麻豆国产自产在线| 波多野结衣一区二区在线| 亚洲一二在线观看| 国产做a爰片久久毛片| 亚洲女优视频| 日韩欧美视频一区二区三区| 99久久99久久精品免费看小说.| av在线国产精品| 日韩精品亚洲aⅴ在线影院| 无码国产精品一区二区高潮| 麻豆专区一区二区三区四区五区| 欧美性猛交xxxx黑人猛交| 新91视频在线观看| 国产精品99精品一区二区三区∴| 亚洲无人区一区| 亚洲精品成人无码| 日韩肉感妇bbwbbwbbw| 亚洲国产精品综合小说图片区| 欧美黑人做爰爽爽爽| 久久国产欧美日韩精品| 日韩小视频在线观看专区| 国产精品 欧美在线| 欧美三区免费完整视频在线观看| 天天爽夜夜爽| 色久综合一二码| 欧美高清视频在线高清观看mv色露露十八| 国产一区二区按摩在线观看| 国产精品一品二品| √…a在线天堂一区| 国产精品99久久99久久久| 亚洲成色精品| 欧美成人性福生活免费看| 亚洲欧美日韩天堂一区二区| 成人在线观看一区二区| 日本一区二区三区视频在线播放| 亚洲最新视频在线| 欧美色图亚洲激情| 在线不卡一区二区| 亚洲a∨精品一区二区三区导航| 欧美高清视频一区二区| 中文字幕不卡在线| 欧美性极品xxxx做受| 欧美狂猛xxxxx乱大交3| 欧美日韩一区 二区 三区 久久精品| 日韩精品电影在线| 91精品国产综合久久久久久久久| 尤物99国产成人精品视频| 成人写真福利网| 欧美激情一级精品国产| 欧美日韩极品在线观看一区| 麻豆免费视频网站入口| 精品99又大又爽又硬少妇毛片| 欧美日韩一区二区三区在线| 国产精品天美传媒沈樵| 青青草久久伊人| 男人的午夜天堂| 亚洲成人国产综合| 91麻豆精品国产91久久久更新资源速度超快| 成人国产1314www色视频| 国外成人在线视频网站| 你懂的网站在线播放| 国产偷久久久精品专区| 成人免费视频91| 日本精品一区在线| 乱子伦一区二区| 亚洲成人av在线影院| 国产又粗又长又大视频| 亲子乱一区二区三区电影| 福利小视频网站| 7777精品伊人久久久大香线蕉的| 久操视频免费在线观看| 在线免费观看黄色小视频| 好吊色视频一区二区三区| 久久国产精品一区二区三区四区| 国产色99精品9i| 五月婷婷伊人网| av免费在线观| 99久热在线精品视频观看| 嫩草视频免费在线观看| 亚洲va欧美va国产va天堂影院| 国产精品极品美女在线观看免费| 国产精品久久久久久户外露出| 国产超碰在线| 日韩欧美一区二| 超碰公开在线| 国精产品999国精产品官网| 欧美在线观看视频一区二区三区| 日本免费黄色小视频| 精品欧美乱码久久久久久| 爆操妹子视频在线观看| 欧美午夜视频网站| 亚洲精品无码久久久久久| 婷婷综合成人| 国产麻豆午夜三级精品| 国产夜色精品一区二区av| 国产精品精品国产色婷婷| 欧美美女黄色| 国产精品成人免费视频| 无码内射中文字幕岛国片| 日韩黄色免费电影| 亚洲精品成人无限看| 亚洲一区二区人妻| 日韩电影在线免费观看| 69av在线视频| 日韩手机在线观看| 日日夜夜操视频| 在线免费a视频| 一区二区视频在线免费观看| www.8ⅹ8ⅹ羞羞漫画在线看| 国产精品国产三级国产aⅴ浪潮| 男人天堂电影网| 小早川怜子一区二区的演员表| 一区二区三区视频在线看| 成人av网址在线| 男人操女人免费| 日本高清视频免费在线观看| 亚洲欧美自拍偷拍色图| 黑人巨大40厘米重口ysn| 日韩一区二区在线视频| 精品亚洲免a| 国产麻豆久久| 欧美日本韩国一区二区三区| 国产污在线观看| 精品少妇一区二区三区在线视频| 加勒比在线一区| 国产精品theporn88| www欧美激情| 国产亚洲欧洲黄色| 一区二区三区导航| 日韩性生活视频| 亚洲国产精品成人| 国产福利在线观看视频| 四虎永久免费影库二三区| 欧妇女乱妇女乱视频| 开心激情五月网| 成人免费毛片东京热| 亚洲精品久久久久久一区二区| 999国产精品一区| 不卡中文字幕在线观看| 人与动性xxxxx免费视频| brazzers精品成人一区| 日韩有码在线电影| 天天综合在线观看| 老牛精品亚洲成av人片| 高h放荡受浪受bl| 激情五月五月婷婷| 精品久久久久99| 亚洲国产精品va| 亚洲综合日韩| 国产亚洲高清在线观看| 天堂中文在线www| 国产乱码精品一区二区三区日韩精品| 天天天干夜夜夜操| 成人激情五月天| 欧美精品久久久久性色| 国产激情在线观看视频| 国产精品zjzjzj在线观看| 亚洲图片另类小说| 国产一区免费观看| 亚洲少妇在线| 国产一二三四区在线观看| 无码播放一区二区三区| 欧美黄色免费视频| 午夜精品一区二区三区av| 91香蕉国产视频| 69成人免费视频| 在线观看免费av片| 尤物精品国产第一福利三区| 99re66热这里只有精品4| 国产色视频网站| 亚洲精品久久7777777| 精精国产xxxx视频在线中文版| 婷婷久久国产对白刺激五月99| 亚洲天堂久久久久| 欧美绝顶高潮抽搐喷水合集| 国产专区精品| 欧美视频精品全部免费观看| 日韩一区二区三区在线| jizz日本免费| 特级西西444www高清大视频| 91免费看片在线观看| 中文字幕中文在线不卡住| 精品影片在线观看的网站| 欧美男生操女生| 性色88av老女人视频| 猫咪av网站| 亚洲第一区在线| 99久久精品国产毛片| 少妇丰满尤物大尺度写真| 欧美在线免费观看亚洲| 国内激情视频在线观看| 久久99免费视频| 青青草国产在线观看| 欧美激情综合五月色丁香| 欧美日韩激情视频8区| 亚洲香蕉在线观看| 久久免费视频色| 欧美日韩一区二区免费视频| 热久久99这里有精品| 成av人片在线观看www| 极品av少妇一区二区| 中文字幕一区二区三区四区五区| 亚洲黄色三级| 亚洲美免无码中文字幕在线| www.国产com| 免费a在线看| 羞羞免费视频| 中文字幕2区| 一区二区视频欧美| 欧美激情精品久久久久| 国产av无码专区亚洲a∨毛片| 久久亚洲国产精品| 亚洲AV成人无码一二三区在线| 欧美精品日韩一本| 国产一二三四在线| 99久久99久久精品国产片果冰| 国产短剧电视剧免费观看| 久久久久国产精品免费免费搜索| 欧美人与牲动交xxxx| 欧美特黄一级大片| 亚洲视频在线观看视频| 最新成人av在线| 亚洲男人天堂九九视频| 国产精品久久综合av爱欲tv| 日韩毛片在线一区二区毛片| 日韩在线免费| 欧美亚洲自偷自偷| 国产手机精品视频| 亚洲精品乱码久久久久久自慰| 91九色论坛| 舔足天天操天天射| 99产精品成人啪免费网站| 国产女精品视频网站免费| 综合精品一区| 一区二区成人精品| 欧美96一区二区免费视频| 亚洲视频免费| 一个色妞综合视频在线观看| 亚洲人的天堂男人爽爽爽| 夜夜春亚洲嫩草影视日日摸夜夜添夜| 日韩精品在线免费播放| 久久久久久夜精品精品免费| 韩国久久久久久| 性xx十八spa按摩| 日本激情一区二区| 亚洲一二三四2021不卡| 日韩精品在线视频观看| 久久夜色邦福利网| 色婷婷综合久久久久久| 少妇免费毛片久久久久久久久| 欧美精品一区二区视频| 黄色片网站免费| 欧美77777| 国产三级在线免费| 国产精品亚洲产品| 日韩制服丝袜av| www.色播.com| 91精彩视频在线播放| 欧美暴力喷水在线| 日本中文字幕网址| 成人欧美视频在线观看播放| 亚洲黄色免费观看| 欧美孕妇与黑人孕交| 凹凸av导航大全精品| 真实乱视频国产免费观看| 中文字幕在线永久在线视频2020| 国产在线视频在线| 亚洲国产欧美在线人成| 秋霞av国产精品一区| 麻豆一区一区三区四区| 国产一级中文字幕| 亚洲亚洲精品三区日韩精品在线视频| 婷婷国产在线| 亚洲人成精品久久久| 中文在线а√天堂| 欧美有码在线| 99精品女人在线观看免费视频| 国产一区二区影院| 成人国产精品久久| 欧美精品偷拍| 成年网站免费| 手机在线播放av| 日韩免费电影一区| 黑人巨大精品欧美一区二区三区| 天堂аⅴ在线最新版在线| 不卡一卡二卡三乱码免费网站| 男女男精品视频| 91亚洲va在线va天堂va国| 欧美午夜精品一区二区三区| 亚洲色图视频网| 国产绿帽刺激高潮对白| 男男gay无套免费视频欧美| 亚洲熟女少妇一区二区| 神马影院一区二区| 色视频在线免费| www.狠狠操|