setjmp和longjmp longjmp和siglongjmp的區(qū)別?
longjmp和siglongjmp的區(qū)別?Goto語句實現(xiàn)程序執(zhí)行的本地跳轉(zhuǎn),longjmp()和setjmp()函數(shù)實現(xiàn)程序執(zhí)行的遠程跳轉(zhuǎn)。一般來說,應(yīng)該避免任何形式的執(zhí)行跳轉(zhuǎn),因為在程序中使用g
longjmp和siglongjmp的區(qū)別?
Goto語句實現(xiàn)程序執(zhí)行的本地跳轉(zhuǎn),longjmp()和setjmp()函數(shù)實現(xiàn)程序執(zhí)行的遠程跳轉(zhuǎn)。一般來說,應(yīng)該避免任何形式的執(zhí)行跳轉(zhuǎn),因為在程序中使用goto語句或longjmp()函數(shù)不是一個好的編程習(xí)慣。goto語句跳過程序中的一段代碼并轉(zhuǎn)到預(yù)先指定的位置。為了使用goto語句,您需要預(yù)先指定一個帶標簽的位置作為跳轉(zhuǎn)位置,它必須與goto語句具有相同的功能。不同功能之間無法實現(xiàn)跳轉(zhuǎn)。
為什么GetHostByName總是阻塞的?
1、方法在Linux環(huán)境下,gethostbyname函數(shù)用于從DNS查詢域名的IP地址。由于DNS查詢方式為遞歸查詢,在網(wǎng)絡(luò)未連接的情況下查詢域名時,gethostbyname函數(shù)會出現(xiàn)嚴重的超時問題。而且該函數(shù)不能通過set套接字或connect、read等選擇函數(shù)來設(shè)置超時時間,因此常常成為程序開發(fā)的瓶頸。在多線程環(huán)境中,gethostbyname將有一個非常嚴重的問題,即如果一個線程的gethostbyname阻塞,其他線程將阻塞gethostbyname,直到線程的gethostbyname函數(shù)返回。我們應(yīng)該如何處理這樣的問題?這里有兩種方法:1。使用警報器設(shè)置信號。如果發(fā)生超時,請使用sigsetjmp和siglongjmp跳過gethostbyname函數(shù)。2獨立地打開一個線程來調(diào)用gethostbyname函數(shù)。線程除了調(diào)用這個函數(shù)外什么也不做。2、 方法簡介1。報警設(shè)置信號方法(1)、sigsetjmp和siglongjmp概述。Sigsetjmp:參數(shù)不為0時,保存進程的當前信號掩碼字。Siglongjmp:恢復(fù)保存的信號掩碼字(2),用法#包括