在Linux系统下,执行sem_timewait(),在等待锁的期间,当前线程会睡眠,选择其它线程执行,还是在原地阻塞,直到超时?
超时以后,如果还没获取到锁,是睡眠当前进程,还是阻塞当前进程?
在Linux系统下,执行sem_timewait(),在等待锁的期间,当前线程会睡眠,选择其它线程执行,还是在原地阻塞,直到超时?
超时以后,如果还没获取到锁,是睡眠当前进程,还是阻塞当前进程?
sem_timewait 函数会阻塞当前线程直到拿到锁或超时才会返回。阻塞的实现方式就是休眠当前线程,直到锁释放或者超时后唤醒。
超时后这个函数返回继续执行后面的代码,后面的代码逻辑决定后面的行为。
休眠是阻塞的一种实现或者说表现方式,二者不是一个层面的概念。
7 回答5.3k 阅读
4 回答4k 阅读
2 回答5.9k 阅读✓ 已解决
2 回答2.5k 阅读✓ 已解决
1 回答2.3k 阅读✓ 已解决
2 回答800 阅读✓ 已解决
1 回答3.3k 阅读
如果你说的是
sem_timedwait
:我印象中,只有自旋锁会在原地阻塞,而其他同步机制都是会睡眠。
第二个问题在 man 手册中有提到,当超时还没有获得锁,函数会以 timeout 的错误失败返回,errno 会设置 ETIMEDOUT