首頁 後端開發 php教程 nginx中的多執行緒時間更新模型

nginx中的多執行緒時間更新模型

Aug 08, 2016 am 09:31 AM
atomic lock time

在nginx中,ngx_time_update函數可以被多個執行緒執行,但只要有一個執行緒執行了這個函數,其他執行緒就不需要執行這個函數。

對於這種需求,nginx給出的實現方案挺有意思。

ngx_time_update開頭兩句如下:

    if (!ngx_trylock(&ngx_time_lock)) {
        return;
    }
    // do something...
    ngx_unlock(&ngx_time_lock);
登入後複製

ngx_trylock和ngx_unlock都是巨集定義,程式碼如下:

#define ngx_trylock(lock)  (*(lock) == 0 && ngx_atomic_cmp_set(lock, 0, 1))
#define ngx_unlock(lock)    *(lock) = 0
登入後複製
繼續展開ngx_atomic_cmp_set

#define ngx_atomic_cmp_set(lock, old, set)                                    \
     ((ngx_atomic_uint_t) InterlockedCompareExchange((long *) lock, set, old) \
                          == old)
登入後複製
繼續展開ngx_atomic_cmp_set

至此,可以看出這種同步方案是使用InterlockedCompareExchange實現的。

首先,Interlocked系列函數能夠確保操作的原子性。

假設現在ngx_time_lock變數的值為0,有兩個執行緒都要執行InterlockedCompareExchange這個函數了。此時,只會有一個執行緒先執行,它改變了ngx_time_lock的值為1,並回傳0。另外一個執行緒用新的ngx_time_lock值(也就是1)跟0進行比較,此時,不會發生交換,並且傳回原始的值1,保證這個執行緒在if判斷處回傳。

另外,ngx_atomic_t的型別定義為:typedef volatile unsigned int ngx_atomic_t;

以上就介紹了nginx中的多執行緒時間更新模型,包含了方面的內容,希望對PHP教學有興趣的朋友有幫助。

🎜
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章標籤

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

time包的單調時鐘處理 time包的單調時鐘處理 Aug 04, 2023 pm 05:45 PM

time包的單調時鐘處理

Java8 Time Api如何使用 Java8 Time Api如何使用 Apr 28, 2023 pm 12:25 PM

Java8 Time Api如何使用

Java多執行緒中Lock怎麼使用 Java多執行緒中Lock怎麼使用 May 12, 2023 pm 02:46 PM

Java多執行緒中Lock怎麼使用

Java Lock類別提供哪些功能? Java Lock類別提供哪些功能? Apr 21, 2023 am 08:16 AM

Java Lock類別提供哪些功能?

Java中Lock的使用方式有哪些? Java中Lock的使用方式有哪些? Apr 23, 2023 pm 08:52 PM

Java中Lock的使用方式有哪些?

Python time模組時間怎麼取得與轉換 Python time模組時間怎麼取得與轉換 May 13, 2023 pm 12:19 PM

Python time模組時間怎麼取得與轉換

java中lock取得鎖定的方法有哪些 java中lock取得鎖定的方法有哪些 May 19, 2023 pm 01:13 PM

java中lock取得鎖定的方法有哪些

python中time和datetime的差別及用法是什麼 python中time和datetime的差別及用法是什麼 May 02, 2023 am 11:01 AM

python中time和datetime的差別及用法是什麼

See all articles