Добрый день!
Подскажите, пожалуйста, почему sem_timedwait сразу же завершается,
хотя я бы в приведенном далее примере ожидал от него трехтысячесекундного ожидания?
/tmp >time ./a.out
110
Connection timed out
real 0m0.002s
user 0m0.000s
sys 0m0.000s
/tmp >cat sem.c
#include <semaphore.h>
#include <errno.h>
main()
{
sem_t st;
struct timespec ts;
ts.tv_sec = 3000;
ts.tv_nsec = 0;
sem_init(&st, 0, 0);
// sem_wait(&st);
if (sem_timedwait(&st, &ts))
{
printf("%d\n", errno);
perror(0);
}
}
С другой стороны, если в семафоре живет 1, то он
сразу же возвращает 0.
Просто sem_wait, естественно, ведет себя вполне ожидаемым образом
и при занятом и при свободном семафоре.
/tmp >ldd a.out
libpthread.so.0 => /lib/tls/libpthread.so.0 (0x4002b000)
libc.so.6 => /lib/tls/libc.so.6 (0x42000000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
/tmp >rpm -qf /lib/tls/libpthread.so.0
glibc-2.3.2-11.9
Os — Redhat 9, ядро 2.4.20, компилятор gcc 3.2.2
Я так понимаю, что sem_timedwait - не вполне стандартная функция, и я бы смирился с ее полным отсутствием, но здесь какое-то уж больно странное поведение. Буду очень признателен за попытку выполнения моего теста на других системах. При сборке нужно указать -lpthread
Ответ на:
комментарий
от romanSA
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Переход от LinuxThreads к NTPL (2004)
- Форум Помогите!!! Скомпилить прог у и запустить еёан другой машине. (2004)
- Форум [C++] Странная проблема с localtime_r и семафорами (2009)
- Форум sem_timedwait и CLOCK_MONOTONIC_RAW (2017)
- Форум устал ждать (2008)
- Форум как правильно ждать? (2020)
- Форум Надоело ждать. 10.10 (2010)
- Форум ARM когда ждать? (2009)
- Форум Сколько ждать второго свидания? (2018)
- Форум Ждать ли LOR API? (2012)