Главная страница


ru.unix.bsd

 
 - RU.UNIX.BSD ------------------------------------------------------------------
 From : Valentin Nechayev                    2:5020/400     04 Feb 2004  17:45:11
 To : Slawa Olhovchenkov
 Subject : Re: синхронизация.
 -------------------------------------------------------------------------------- 
 
 >>> Slawa Olhovchenkov wrote:
 
 SO> Что-то я на ручник встал.
 SO> Есть программа, не тредовая.
 SO> Она крутится в цикле, формирует список.
 SO> По приходу сигнала -- что-то с этим списком делает.
 SO> А как бы сделать так, что бы себе на яйца не наступить? Или я губень
 SO> раскатал?
 
 Про sigprocmask тебе уже рассказали детально.
 
 Если список однонаправленный, то некоторые действия с ним (добавление
 в начало, например) можно делать на lock-free алгоритмах.
 Hапример:
 
   /* Добавление в голову */
   do {
    Elem* currhead = head;
    newelem->next = currhead;
   } while( !atomic_compare_and_set( &head, newelem, currhead ) );
 
 atomic_compare_and_set(a,b,c) действует так: если *a==c, то *a=b (присвоить)
 и вернуть 1, иначе вернуть 0. Внутри неё по сути одна команда CMPXCHG
 (для x86).
 
 В comp.programming.threads (или comp.unix.programmer?) был ~2 месяца назад
 длинный флейм про границы удобства и применимости lock-free алгоритмов.
 
 P.S. При реализации того, что "По приходу сигнала -- что-то с этим
 списком делает", надо тщательно проверить неиспользование async-signal-unsafe
 функций или же синхронное разрешение сигналов (тем же sigprocmask).
 Hесоблюдение этого - чревато боком.
 
 Яр Тихий делал FAQ по работе с сигналами, я его раз в пару месяцев
 засылаю в [fido7.]ru.unix.prog. Там всё это обсосано до косточек.
 Рекомендую, кстати, продолжить обсуждение именно там.
 -netch-
 --- ifmail v.2.15dev5.3
  * Origin: Dark side of the coredump (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 синхронизация.   Slawa Olhovchenkov   03 Feb 2004 17:29:12 
 =?koi8-r?B?UmU6INPJzsjSz87J2sHDydEu?=   Dmitry Pryanishnikov   03 Feb 2004 18:40:37 
 синхронизация.   Max Khon   04 Feb 2004 01:32:52 
 синхронизация.   Slawa Olhovchenkov   04 Feb 2004 12:31:22 
 синхронизация.   Max Khon   04 Feb 2004 17:02:14 
 синхронизация.   Slawa Olhovchenkov   04 Feb 2004 14:38:24 
 Re: синхронизация.   Lev Walkin   04 Feb 2004 15:29:30 
 синхронизация.   Slawa Olhovchenkov   04 Feb 2004 15:41:10 
 синхронизация.   Max Khon   04 Feb 2004 21:47:50 
 синхронизация.   Slawa Olhovchenkov   05 Feb 2004 12:49:18 
 синхронизация.   Max Khon   05 Feb 2004 17:51:28 
 синхронизация.   Slawa Olhovchenkov   05 Feb 2004 17:02:22 
 =?koi8-r?B?UmU6INPJzsjSz87J2sHDydEu?=   Dmitry Pryanishnikov   04 Feb 2004 13:04:05 
 синхронизация.   Slawa Olhovchenkov   04 Feb 2004 14:24:50 
 =?koi8-r?B?UmU6INPJzsjSz87J2sHDydEu?=   Dmitry Pryanishnikov   04 Feb 2004 16:02:10 
 УЙОИТПОЙЪБГЙС.   Max Khon   04 Feb 2004 21:53:18 
 =?koi8-r?B?UmU6IKqlvqubub6lgomGpZMu?=   Dmitry Pryanishnikov   05 Feb 2004 13:10:31 
 Re: синхронизация.   Valentin Nechayev   04 Feb 2004 17:45:11 
 синхронизация.   Slawa Olhovchenkov   04 Feb 2004 18:08:50 
 Re: синхронизация.   Valentin Nechayev   04 Feb 2004 19:09:04 
 синхронизация.   Slawa Olhovchenkov   04 Feb 2004 19:38:34 
 Re: синхронизация.   Valentin Nechayev   04 Feb 2004 22:10:10 
 синхронизация.   Slawa Olhovchenkov   04 Feb 2004 22:21:42 
 Re: синхронизация.   Valentin Nechayev   05 Feb 2004 10:40:49 
 Re: синхронизация.   Dmitry Miloserdov   04 Feb 2004 21:22:01 
 Re: синхронизация.   Valentin Nechayev   04 Feb 2004 22:10:11 
Архивное /ru.unix.bsd/10513727dccf3.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional