Bug 10364 - Блокирование таймера созданного timer_create()
: Блокирование таймера созданного timer_create()
Status: CLOSED FIXED
: Branch 3.0
(All bugs in Branch 3.0/glibc)
: 3.0
: all Linux
: P2 critical
Assigned To:
:
:
:
:
:
  Show dependency tree
 
Reported: 2006-12-04 11:03 by
Modified: 2007-05-23 18:24 (History)


Attachments
Программка тестирования на блокировку прерываний (1.51 KB, text/plain)
2006-12-05 11:41, Roman Savochenko
no flags Details


Note

You need to log in before you can comment on or make changes to this bug.


Description From 2006-12-04 11:03:10
Дистрибутив: ALTLinux 3.0
GLibC: glibc-2.3.5-alt5
Описание проблемы:
Проблема замечена при создании таймера функцией timer_create(), с методом
уведомления SIGEV_THREAD. Таймер создаётся периодическим, вызывающим создание
нового потока. На первый взгляд таймер работает нормально, т.е. потоки создаются
выполняются и завершаются. Но, если вызванный таймером поток выполняется
продолжительное время, то становится видимым блокирование таймера. Причем,
блокируется не только таймер вызвавший продолжительное время выполняющийся
поток, но и все таймеры созданные функцией timer_create()! Эта проблема
практически сводит на нет возможность использования POSIX таймеров, а учитывая и
неоднозначность в работе интервального таймера setitimer() на различных моделях
потоков, то и таймеров вообще!
На дистрибутиве SuSE Linux 10.1 с NPTL 2.4 в GlibC POSIX таймера работают
нормально и не приводят к взаимному блокированию.
------- Comment #1 From 2006-12-05 11:41:13 -------
Created an attachment (id=1697) [details]
Программка тестирования на блокировку прерываний

Написал программку для наглядной демонстрации и выявления данной проблемы. При
запуске её на ALTLinux3.0 и SuSe 10.1 четко видно блокирование быстрого таймера
в ALTLinux3.0 на момент исполнения потока медленного таймера.
//========== ALTLinux3.0 ==============
Fast task call.
Fast task call.
Fast task call.
Fast task call.
Begin the slow and the long execution task call.
End the slow and the long execution task call.
Fast task call.
Fast task call.
Fast task call.
Fast task call.
Fast task call.
Fast task call.
Begin the slow and the long execution task call.
End the slow and the long execution task call.
Fast task call.
Fast task call.
Fast task call.
//=======================================
//============= SuSE 10.1 ===============
Fast task call.
Fast task call.
Fast task call.
Begin the slow and the long execution task call.
Fast task call.
Fast task call.
Fast task call.
Fast task call.
Fast task call.
End the slow and the long execution task call.
Fast task call.
Fast task call.
Fast task call.
Fast task call.
Fast task call.
Begin the slow and the long execution task call.
Fast task call.
Fast task call.
Fast task call.
Fast task call.
Fast task call.
End the slow and the long execution task call.
Fast task call.
Fast task call.
Fast task call.
//=======================================
------- Comment #2 From 2006-12-05 12:06:08 -------
Эта проблема, кстате, актуальна и для ALTLinux 2.4.
------- Comment #3 From 2007-04-02 18:27:59 -------
Проблема не актуальна для glibc-2.5-alt4 из Сизифа.
------- Comment #4 From 2007-05-23 18:24:15 -------
Закрываю как не актуальный для 4.0