在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
#define ngx_atomic_cmp_set(lock, old, set) \ ((ngx_atomic_uint_t) InterlockedCompareExchange((long *) lock, set, old) \ == old)
以上就介紹了nginx中的多執行緒時間更新模型,包含了方面的內容,希望對PHP教學有興趣的朋友有幫助。
🎜