臨界
低轉化條件
臨界是指由某一種狀態或物理量轉變為另一種狀態或物理量的最低轉化條件;或者由一種狀態或物理量轉變為另一種狀態或物理量。
1、指由一種狀態或物理量轉變為另一種狀態或物理量。
《花城》1982年第3期:“何況,控制水位還有安全係數,並非臨界。”參見“臨界角”、“臨界點”。
2、熱力學臨界點是可使一物質以液態存在的最低壓力及最高溫度,也說是物質的液態及氣態開始無法區分的壓力及溫度。其壓力及溫度也稱為臨界壓力及臨界溫度。
物質超過臨界點後會呈現超臨界流體的特性。
3、臨界阻尼:當ζ = 1時,的解為一對重實根,此時系統的阻尼形式稱為臨界阻尼。現實生活中,許多大樓內房間或衛生間的門上在裝備自動關門的扭轉彈簧的同時,都相應地裝有阻尼鉸鏈,使得門的阻尼接近臨界阻尼,這樣人們關門或門被風吹動時就不會造成太大的聲響。
4、宇宙膨脹的臨界:弗里德曼方程
是廣義相對論框架下描述空間上均一且各向同性的膨脹宇宙模型的一組方程。它們最早由亞歷山大·弗里德曼在1922年得出,他通過在弗里德曼-勒梅特-羅伯遜-沃爾克度規下對具有給定質量密度和壓力的流體的能量-動量張量應用愛因斯坦引力場方程而得到。而具有負的空間曲率的方程則由弗里德曼在1924年得到。
critical pressure
物質處於臨界狀態時的壓力(壓強)。就是在臨界溫度時使氣體液化所需要的最小壓力。也就是液體在臨界溫度時的飽和蒸氣壓。
臨界
不論是硬體臨界資源,還是軟體臨界資源,多個進程必須互斥地對它進行訪問。每個進程中訪問臨界資源的那段代碼稱為臨界區(Critical Section)(臨界資源是一次僅允許一個進程使用的共享資源)。每次只准許一個進程進入臨界區,進入后不允許其他進程進入。
多個進程中涉及到同一個臨界資源的臨界區稱為相關臨界區。
程序調度法則
進程進入臨界區的調度原則是:
1、如果有若干進程要求進入空閑的臨界區,一次僅允許一個進程進入。
2、任何時候,處於臨界區內的進程不可多於一個。如已有進程進入自己的臨界區,則其它所有試圖進入臨界區的進程必須等待。
3、進入臨界區的進程要在有限時間內退出,以便其它進程能及時進入自己的臨界區。
4、如果進程不能進入自己的臨界區,則應讓出CPU,避免進程出現“忙等”現象。
線程同步問題 如果有多個線程試圖同時訪問臨界區,那麼在有一個線程進入后其他所有試圖訪問此臨界區的線程將被掛起,並一直持續到進入臨界區的線程離開。臨界區在被釋放后,其他線程可以繼續搶佔,並以此達到用原子方式操作共享資源的目的。
臨界區在使用時以CRITICAL_SECTION結構對象保護共享資源,並分別用EnterCriticalSection()和LeaveCriticalSection()函數去標識和釋放一個臨界區。所用到的CRITICAL_SECTION結構對象必須經過InitializeCriticalSection()的初始化后才能使用,而且必須確保所有線程中的任何試圖訪問此共享資源的代碼都處在此臨界區的保護之下。否則臨界區將不會起到應有的作用,共享資源依然有被破壞的可能。
下面通過一段代碼展示了臨界區在保護多線程訪問的共享資源中的作用。通過兩個線程來分別對全局變數g_cArray[10]進行寫入操作,用臨界區結構對象g_cs來保持線程的同步,並在開啟線程前對其進行初始化。為了使實驗效果更加明顯,體現出臨界區的作用,在線程函數對共享資源g_cArray[10]的寫入時,以Sleep()函數延遲1毫秒,使其他線程同其搶佔CPU的可能性增大。如果不使用臨界區對其進行保護,則共享資源數據將被破壞(參見圖1(a)所示計算結果),而使用臨界區對線程保持同步后則可以得到正確的結果(參見圖1(b)所示計算結果)。
代碼實現清單附下:
// 臨界區結構對象
CRITICAL_SECTION g_cs;
// 共享資源
char g_cArray[10];
UINT ThreadProc10(LPVOID pParam)
{
// 進入臨界區
EnterCriticalSection(&g_cs);
// 對共享資源進行寫入操作
for (int i = 0; i < 10; i++)
{
g_cArray[i] = a;
}
UINT ThreadProc11(LPVOID pParam)
{
// 進入臨界區
EnterCriticalSection(&g_cs);
// 對共享資源進行寫入操作
for (int i = 0; i < 10; i++)
{
g_cArray[10 - i - 1] = b;
Sleep(1);
}
// 離開臨界區
LeaveCriticalSection(&g_cs);
return 0;
}
……
void CSample08View::OnCriticalSection()
{
// 初始化臨界區
InitializeCriticalSection(&g_cs);
// 啟動線程
AfxBeginThread(ThreadProc10, NULL);
AfxBeginThread(ThreadProc11, NULL);
// 等待計算完畢
Sleep(300);
// 報告計算結果
CString sResult = CString(g_cArray);
AfxMessageBox(sResult);
}
其他問題:在使用臨界區時,一般不允許其運行時間過長,只要進入臨界區的線程還沒有離開,其他所有試圖進入此臨界區的線程都會被掛起而進入到等待狀態,並會在一定程度上影響程序的運行性能。尤其需要注意的是不要將等待用戶輸入或是其他一些外界干預的操作包含到臨界區。如果進入了臨界區卻一直沒有釋放,同樣也會引起其他線程的長時間等待。換句話說,在執行了EnterCriticalSection()語句進入臨界區后無論發生什麼,必須確保與之匹配的LeaveCriticalSection()都能夠被執行到。可以通過添加結構化異常處理代碼來確保LeaveCriticalSection()語句的執行。雖然臨界區同步速度很快,但卻只能用來同步本進程內的線程,而不可用來同步多個進程中的線程。
中文名稱:臨界溫度
英文名稱:critical temperature
定義:臨界點的溫度。水的臨界溫度為374.15℃。
應用學科:電力(一級學科);通論(二級學科)
臨界溫度,使物質由氣相變為液相的最高溫度叫臨界溫度。每種物質都有一個特定的溫度,另外有生態學的臨界溫度的釋義。
物理學釋義:
簡單定義:液體能維持液相的最高溫度叫臨界溫度。
定義解釋
①物質處於臨界狀態時的溫度。
②物質以液態形式出現的最高溫度。
③高於臨界溫度,無論加多大壓力都不能使氣體液化。在臨界溫度時,使氣體液化所必須的最低壓力叫臨界壓力。
④臨界溫度越低,越難液化。
說明
①每種物質都有一個特定的溫度,在這個溫度以上,無論怎樣增大壓強,氣態物質不會液化,這個溫度就是臨界溫度。降溫加壓,是使氣體液化的條件。但只加壓,不一定能使氣體液化,應視當時氣體是否在臨界溫度以下。因此要使物質液化;首先要設法達到它自身的臨界溫度。水蒸汽的臨界溫度為647.3開爾文(k),遠比常溫度要高,因此,平常水蒸汽極易冷卻成水,有些物質如氨、二氧化碳等,它們的臨界溫度高於或接近室溫,對這樣的物質在常溫下很容易壓縮成液體。有些物質如氧、氮、氫、氦等的臨界溫度很低,其中氦氣的臨界溫度為一268℃。要使這些氣體液化,必須相應的要有一定的低溫技術,以使能達到它們各自的臨界溫度,然後再用增大壓強的方法使它液化。
②通常把在臨界溫度以上的氣態物質叫做氣體,把在臨界溫度以下的氣態物質叫做汽體。
導體由普通狀態向超導態轉變時的溫度稱為為超導體的轉變溫度,或臨界溫度,用Tc 表示.