Wait[英語單詞]

Wait[英語單詞]

wait英語中有等待的意思,在計算機領域它還是一種Java術語,C語言中也有wait命令。

基本信息

概述

public final void wait() throwsInterruptedException在其他執行緒調用此對象的notify()方法或notifyAll()方法前,導致當前執行緒等待。換句話說,此方法的行為就好像它僅執行 wait(0)調用一樣。 當前執行緒必須擁有此對象監視器。該執行緒發布對此監視器的所有權並等待,直到其他執行緒通過調用 notify方法,或 notifyAll方法通知在此對象的監視器上等待的執行緒醒來。然後該執行緒將等到重新獲得對監視器的所有權後才能繼續執行。 對於某一個參數的版本,實現中斷和虛假喚醒是可能的,而且此方法應始終在循環中使用: synchronized (obj) { while (<condition does not hold>) obj.wait(); .. 拋出:IllegalMonitorStateException- 如果當前執行緒不是此對象監視器的所有者。InterruptedException- 如果在當前執行緒等待通知之前或者正在等待通知時,任何執行緒中斷了當前執行緒。在拋出此異常時,當前執行緒的 中斷狀態被清除。

當前執行緒必須擁有此對象監聽器。 此方法導致當前執行緒(稱之為 T)將其自身放置在對象的等待集中,然後放棄此對象上的所有同步要求。出於執行緒調度目的,在發生以下四種情況之一前,執行緒 T被禁用,且處於休眠狀態: 其他某個執行緒調用此對象的 notify方法,並且執行緒 T碰巧被任選為被喚醒的執行緒。

大約已經到達指定的實際時間。但是,如果 timeout為零,則不考慮實際時間,在獲得通知前該執行緒將一直等待。

然後,從對象的等待集中刪除執行緒T,並重新進行執行緒調度。然後,該執行緒以常規方式與其他執行緒競爭,以獲得在該對象上同步的權利;一旦獲得對該對象的控制權,該對象上的所有其同步聲明都將被恢復到以前的狀態,這就是調用 wait方法時的情況。然後,執行緒T從 wait方法的調用中返回。所以,從 wait方法返回時,該對象和執行緒T的同步狀態與調用 wait方法時的情況完全相同。 在沒有被通知、中斷或逾時的情況下,執行緒還可以喚醒一個所謂的 虛假喚醒(spurious wakeup)。雖然這種情況在實踐中很少發生,但是應用程式必須通過以下方式防止其發生,即對應該導致該執行緒被提醒的條件進行測試,如果不滿足該條件,則繼續等待。

參數

此方法類似於一個參數的wait方法,但它允許更好地控制在放棄之前等待通知的時間量。用毫微秒度量的實際時間量可以通過以下公式計算出來: 1000000*timeout+nanos在其他所有方面,此方法執行的操作與帶有一個參數的wait(long)方法相同。需要特別指出的是,wait(0, 0)與 wait(0)相同。

timeout毫秒值與 nanos毫微秒參數值之和指定的逾時時間已用完。

然後,該執行緒等到重新獲得對監視器的所有權後才能繼續執行。 對於某一個參數的版本,實現中斷和虛假喚醒是有可能的,並且此方法應始終在循環中使用: synchronized (obj) { while (<condition does not hold>) obj.wait(timeout, nanos);參數:timeout- 要等待的最長時間(以毫秒為單位)。 nanos- 額外時間(以毫微秒為單位,範圍是 0-999999)。

英文

wait [weɪt]

n. 等待, 等待時間

v. 等, 耽擱, 等候; 等候, 延緩, 期待

函式

wait(等待子進程中斷或結束,相關函式 waitpid,fork

表頭檔案

#include<sys/types.h>

#include<sys/wait.h>

函式原型

pid_t wait (int * status);

函式說明

參數 status 是一個整形指針。如果status不是一個空指針,則終止進程的終止狀態將存儲在該指針所指向的記憶體單元中。如果不關心終止狀態,可以將 status參數設定為NULL。

status 不是NULL時子進程的結束狀態值會由參數 status 返回,而子進程的進程識別碼作為函式返回值返回。

調用 wait 函式時,調用進程將會出現下面的情況:

· 如果其所有子進程都還在運行,則阻塞。

· 如果一個子進程已經終止,正等待父進程獲取其終止狀態,則獲取該子進程的終止狀態然後立即返回。

· 如果沒有任何子進程,則立即出錯返回。

返回值

如果執行成功則返回子進程識別碼(PID),如果有錯誤發生則返回-1。失敗原因存於errno 中。

範例

#include<stdlib.h>

#include<unistd.h>

#include<sys/types.h>

#include<sys/wait.h>

main()

pid_t pid;

int status,i;

if(fork()= =0){

printf(“This is the child process .pid =%d\n”,getpid());

exit(5);

}else{

sleep(1);

printf(“This is the parent process ,wait for child...\n”;

pid=wait(&status);

i=WEXITSTATUS(status);

printf(“child’s pid =%d .exit status=%d\n”,pid,i);

執行

This is the child process.pid=1501

This is the parent process .wait for child...

child’s pid =1501,exit status =5

waitpid(等待子進程中斷或結束)

相關函式 wait,fork

表頭檔案

#include<sys/types.h>

#include<sys/wait.h>

定義函式 pid_t waitpid(pid_t pid,int * status,int options);

函式說明

waitpid()會暫時停止進程的執行,而子進程的進程識別碼也會一快返回。如果不在意結束狀態值,則參數status 可以設成NULL。參數pid 為欲等待的子進程識別碼,其他數值意義如下:

用途

等待直到一個進程標識終止。

語法

wait [ ProcessID ... ]

表示狀態,時間的延續。

描述

wait 命令等待(暫停執行)直到由ProcessID 變數指定的進程標識終止。如果沒有指定ProcessID 變數,wait 命令會等待直到調用 shell 的所有已知進程標識終止並且以0 為退出狀態退出。如果ProcessID 變數代表一個未知的進程標識,wait 命令會把它們視為以127 為退出狀態退出的已知進程標識。wait 命令以ProcessID 變數指定的上個進程標識的退出狀態退出。

標誌

ProcessID 指定一個命令的無符號十進制整數進程標識,wait 命令會等待直到該進程標識終止。

退出狀態

如果指定一個或多個運算元,所有的運算元終止或不為調用 shell 所知,並且上個運算元指定的狀態是已知的,那么 wait 命令的退出狀態與上個運算元指定的命令退出狀態信息相同。如果進程由於收到信號而異常終止,那么退出狀態會大於128 並且與其它信號生成的退出狀態信息不同,儘管未指定確切的狀態值(請參閱 kill -l 命令選項)。否則,wait 命令會以以下值中的一個退出:

0 以無運算元方式調用 wait 命令,並且調用的 shell 所已知的所有進程標識已經終止。

1-126 wait 命令檢測到一個錯誤。

127 由上一個指定的ProcessID運算元所標識的命令是未知的。

檔案

/usr/bin/wait 包含 wait 命令。

Java術語

術語名稱:wait
術語解釋:是一個UNIX命令。它等待所有後台進程都完成後報告各自的結束狀態。

相關詞條

相關搜尋

熱門詞條