|
|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Vladimir Butenko 2:5020/400 12 Mar 2001 16:13:34 To : All Subject : Re: Microsoft предлагает запретить Linux!!! -------------------------------------------------------------------------------- Valentin Nechayev <netch@segfault.kiev.ua> wrote in message news:98iakm$nvb$1@news.lucky.net... > >>> Vladimir Butenko wrote: > > >> А чем сделали без сисколла-то? Клокинг извне по секундам? > VB> Да нет, решение стандартное, книжное. Если не по упенсурсу учиться. > VB> Заводится тред, который ничего не делает, кроме как вызывает STGMTTime() > VB> (time()), и пишет его в некую переменную (под локами, естественно - зачем, > VB> об"яснять?). Потом засыпает на 250 мсек. И так - в цикле. А > > Hу это я и имел в виду;) только не на 250мс, а на секунду. Hе выйдет - промахиваться будет слишком часто. > А вот зачем писать под локом, когда пишет только один тред, и читать без > лока - уже непонятно. Если бы там было сложнее одного числа в одном машинном > слове, то надо reader/writer locks. Так я потому и написал - "пояснять?". Фишка в том, что на многопроцессорной машине никто Вам не гарантирует, что при выполнении: a : int := 0; thread1: а := 1; ..... thread2: b := a; в b попадет именно 1 ДАЖЕ ЕСЛИ ВЫ ПОЛHОСТЬЮ УВЕРЕHЫ, что в оператор во втором треде выполнится позже. Причина - в кэшах процессоров, который вовсе не обязаны сбрасывать все в память сразу, а также инвалидить кэш других процессоров при каждой записи в память. Поэтому, к сожалению, функция STLock::unlock() - на всех нормальных системах - уходит в ядро, где и происходит сброс кэшей. (К нормальным не относятся сейчас Free/OpenBSD, где треды - чисто узверные, а потому - работают по определению всегда на одном процессоре). Вот поэтому приходится обрамлять локом - который ничего не лочит, а просто гарантирует синхроницазию кэшей. В Форточках на двух-процесорном писюке - без локов очень хорошо видно, как возникает такая ситуация, если не ставить локов. > VB> STGMTNonExact() - > VB> просто берет значение из этой глобальной переменной (без локов). > > Угу, схема известная (phk такое во фревое ядро позагонял). А что тогда спрашиваете :-)? > VB> Вова, > VB> отходя от вчерашнего. > > ;) Это Вам - :-). А меня вот такие мальчики новенькие на пьянках периодически пытаются на землю повалить и ногами попинать. Это, как правило, получается плохо - но косточки мои старые всегда после этого болят :-(. > /netch Вова --- ifmail v.2.15dev5 * Origin: Gamma NNTP server Moscow Russia (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор Архивное /ru.linux/759122f892fe.html, оценка из 5, голосов 10
|