コードはこのようです。状況によってはeagainが返されます。TIME_CREATEはEAGAINを返しますが、リソースは十分です
struct sigevent sev;
sev.sigev_notify = SIGEV_THREAD_ID;
sev._sigev_un._tid = syscall(SYS_gettid);
sev.sigev_signo = alarm_signal();
r = timer_create(CLOCK_MONOTONIC, &sev, &_steady_clock_timer);
assert(r >= 0);
男で、EGAINは二つの状況で返され、
EAGAIN
The system lacks sufficient signal queuing resources to honor the request.
EAGAIN
The calling process has already created all of the timers it is allowed by
this implementation.
第1の状況、私たちのマシンでは、ulimit -iは2061776で、それがこの制限に達することができません。
第2の状況とそれを見つける方法でタイマー制限は何ですか?
[timer_create'のマニュアルページ](http://man7.org/linux/man-pages/man2/timer_create.2.html)には、実際には "タイマー構造のカーネル割り当て時の一時エラー"と書かれています。多分あなたはあなたの議論を再試行したりチェックしたりする必要があります。 '_steady_clock_timer'はここには表示されておらず、正しく初期化されていないかもしれません。 – tadman
'_steady_clock_timer'は' timer_t _steady_clock_timer = {} 'として定義されています –
すべての内部プロパティを初期化するのに十分ですか? – tadman