在Linux系统下,执行sem_timewait(),在等待锁的期间,当前线程会睡眠,选择其它线程执行,还是在原地阻塞,直到超时?超时以后,如果还没获取到锁,是睡眠当前进程,还是阻塞当前进程?
2 回答
四季花海
TA贡献1811条经验 获得超5个赞
如果你说的是sem_timedwait:我印象中,只有自旋锁会在原地阻塞,而其他同步机制都是会睡眠。第二个问题在man手册中有提到,当超时还没有获得锁,函数会以timeout的错误失败返回,errno会设置ETIMEDOUTIfthetimeouthasalreadyexpiredbythetimeofthecall,andthesemaphorecouldnotbelockedimmediately,thensem_timedwait()failswithatimeouterror(errnosettoETIMEDOUT).
慕村9548890
TA贡献1884条经验 获得超4个赞
sem_timewait函数会阻塞当前线程直到拿到锁或超时才会返回。阻塞的实现方式就是休眠当前线程,直到锁释放或者超时后唤醒。超时后这个函数返回继续执行后面的代码,后面的代码逻辑决定后面的行为。休眠是阻塞的一种实现或者说表现方式,二者不是一个层面的概念。
添加回答
举报
0/150
提交
取消
