|
|
ru.unix.bsd- RU.UNIX.BSD ------------------------------------------------------------------ From : Dmitry Pryanishnikov 2:464/36 04 Feb 2004 13:04:05 To : All Subject : =?koi8-r?B?UmU6INPJzsjSz87J2sHDydEu?= -------------------------------------------------------------------------------- Привет! On Wed, 4 Feb 2004, Max Khon wrote: > по приходу сигнала ставить sig_atomic_t переменную в 1, в цикле ее > отслеживать? Hасколько я понимаю, если, например, на C написать постановку элемента в хвост очереди так: /* Link at the end of list */ tp->next=NULL; if (queuehead) queuetail->next = tp; else queuehead = tp; queuetail = tp; то никакими дополнительными переменными и их проверками невозможно гарантировать, что сигнал не "пролезет" между модификациями указателей головы и хвоста очереди. IMHO единставенное правильное решение - блокировать доставку этого сигнала при помощи sigprocmask, затем сделать с очередью все, что нужно, и затем деблокировать доставку сигнала вторым вызовом sigprocmask. P.S. Те, кто программировал задачки реального времени (или игрушки ;) под RSX-11M для PDP-11, наверняка вспомнят тамошние директивы DSAR$ / ENAR$ ). Sincerely, Dmitry -- Atlantis ISP, System Administrator e-mail: dmitry@atlantis.dp.ua nic-hdl: LYNX-RIPE --- ifmail v.2.14.os-p7 * Origin: Atlantis ISP (2:464/36@fidonet) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix.bsd/24521404b078b.html, оценка из 5, голосов 10
|