防止可重入 乙個有趣的類和乙個很有用的巨集!

2021-05-04 10:20:42 字數 719 閱讀 7815

這幾天在研究todolist

原始碼,看到一簡短的類,很很有意思,現把原始碼列下,並附上簡短說明: 注:

重入即表示重複進入,首先它意味著這個函式可以被中斷,其次意味著它除了使用自己棧上的變數以外不依賴於任何環境(包括static

),這樣的函式就是

purecode

(純**)可重入,可以允許有該函式的多個副本在執行,由於它們使用的是分離的棧,所以不會互相干擾。如果確實需要訪問全域性變數(包括

static

),一定要注意實施互斥手段。可重入函式在並行執行環境中非常重要,但是一般要為訪問全域性變數付出一些效能代價。

在多執行緒(或多程序)程式設計中,「重入」

是指多個執行緒或程序「同時

」訪問某個**段(通常指某一函式)。因此,

「可重入

」就是指這個**段支援這樣的操作而不會產生任何問題。無狀態的**段肯定是可重入的,比如求兩個數的平方的函式,但如果**段共享某些資源(比如共享變數),則要達到可重入,必須使用一些同步和或互斥機制。

在單任務的系統中同樣有函式重入的問題,因為c/c

++函式支援中斷和**,為此編譯器在函式呼叫時將返回值的位址做為乙個引數壓棧;這就意味這,在你的函式執行的任何時候中斷都有可能發生,所以你在寫**的時候要加以小心,尤其是在設計中斷服務程式的時候。如果你想支援重入,最好寫成純**(與任何全域性變數無關),不得已用到全域性變數,要對臨界區加鎖;如果你不想重入就關中斷,並保證你的函式是唯一例項執行。

乙個有趣的故事

我有乙個老同學,乙個人娶了兩個老婆,一中一外。這件事情在紐約的華人裡面非常轟動,老同學自己從來不迴避,他經常出沒各種派對,嘴裡叼著雪茄菸,手裡拿著香檳說 我他媽得做個床,能睡三個人的床連他媽美國都沒賣的。老同學的大老婆是個美國人,在華爾街做事情,而且非常出色 二老婆是上海人,我沒見過本人,只看過 漂...

乙個有趣的題目

看到qq群裡有人發了乙個很有意思的題目 如果 昨天是明天就好了,那麼今天就是周五了,請問句中的今天是週幾?晚上睡覺的時候又想起這個問題,發現這個問題還大有文章,其實問題的關鍵在於上面的綠色背景的如果兩個字,既然是如果,那麼思維就可以完全發散,如果時間可以穿越,明天真的可以穿越到昨天,那麼今天其實就是...

乙個有趣的統計

出於好玩的態度,我從4月起開始持續對我的部落格每日訪問情況在excel中做了個記錄,記錄的格式如下 今天頭腦中突然閃過乙個念頭,對週末和非週末的訪問情況做個統計,於是寫了個模組 sub statistic dim i as integer dim visitdatestr as string dim...