在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/C  Linux  網(wǎng)絡(luò)安全/ 在Linux系統(tǒng)下,執(zhí)行sem_timewait(),在等待鎖的期間,當(dāng)前線程會

在Linux系統(tǒng)下,執(zhí)行sem_timewait(),在等待鎖的期間,當(dāng)前線程會睡眠還是阻塞

在Linux系統(tǒng)下,執(zhí)行sem_timewait(),在等待鎖的期間,當(dāng)前線程會睡眠,選擇其它線程執(zhí)行,還是在原地阻塞,直到超時?

超時以后,如果還沒獲取到鎖,是睡眠當(dāng)前進程,還是阻塞當(dāng)前進程?

回答
編輯回答
夢一場

sem_timewait 函數(shù)會阻塞當(dāng)前線程直到拿到鎖或超時才會返回。阻塞的實現(xiàn)方式就是休眠當(dāng)前線程,直到鎖釋放或者超時后喚醒。
超時后這個函數(shù)返回繼續(xù)執(zhí)行后面的代碼,后面的代碼邏輯決定后面的行為。

休眠是阻塞的一種實現(xiàn)或者說表現(xiàn)方式,二者不是一個層面的概念。

2017年11月19日 00:39
編輯回答
執(zhí)念

如果你說的是 sem_timedwait

我印象中,只有自旋鎖會在原地阻塞,而其他同步機制都是會睡眠。

第二個問題在 man 手冊中有提到,當(dāng)超時還沒有獲得鎖,函數(shù)會以 timeout 的錯誤失敗返回,errno 會設(shè)置 ETIMEDOUT

If the timeout has already expired by the time of the call, and the semaphore could not be locked immediately, then sem_timedwait() fails with a timeout error (errno set to ETIMEDOUT).
2018年3月10日 14:52