dibr's Journal
 
[Most Recent Entries] [Calendar View] [Friends View]

Thursday, September 15th, 2011

    Time Event
    9:03p
    синхронизация
         На работе пишем счётную программу, обсчитывающую нечто в двух нитях. Нити должны быть синхронизованы - одна не должна обгонять другую. Сделали так: ("псевдокод" на Си):
    volatile int lock;
    
    main()
    {
     lock=0;
     create_thread(&thread1);
     create_thread(&thread2);
     {ждём и время от времени рисуем графики}
    }
    
    
    thread1()
    {
    while(1)
     {
      {что-то считаем}
      lock++;
      while(lock==1);
      lock=0;
     }
    }
    
    thread2()
    {
    while(1)
     {
      {что-то считаем}
      lock++;
      while(lock==1);
      lock=0;
     }
    }

         Идея ясна: первая нить, досчитав, увеличивает lock, он становится равен 1, нить встаёт в цикл while и ждёт. Вторая нить, досчитав, увеличивает lock, он становится равен 2, нить сбрасывает lock в 0 и идёт на второй круг, первая нить, увидев 0, тоже идёт считать дальше. При желании это легко масштабируется на N нитей, заменой while(lock==1); на while(lock!=0 && lock!=N);. Да, я понимаю. что while(); грузит ядро на 100% - но разница в скорости работы нитей небольшая, да и ядро это всё равно простаивало бы, в ожидании соседней нити. Да, я знаю что "системными функциями было бы надёжнее", но нити крутятся очень быстро, вызывать относительно тяжеловесные системные функции как-то не хочется, такой вот spinlock побыстрее будет.
         Так вот. После нескольких десятков-сотен тысяч "оборотов" обе нити "зависают". Зависают в while(lock==1);. Почему - я так и не понял, volatile вроде не забыл, "гонок" я не вижу. Кто-нибудь может понять, на какие грабли мы тут наступили? Компилятор - какой-то не очень свежий borland C++ builder, какой точно - на работе посмотрю, навскидку не помню.
         Вопрос сейчас уже теоретический - блокировку переписали по другому, "так что работает", а поскольку задача счётная и "для себя", то и пофиг, лишь бы работало. Но чисто теоретически - какого фига? Что тут может быть, lock++ на самом деле неатомарный, или я гонки где-то не заметил?...
    9:24p
    электроправительство
         1) «Известная актриса Скарлетт Йохансон (Scarlett Johansson) стала жертвой хакеров, которые украли ее обнаженные фотографии с мобильного телефона - [конкретно речь идёт об iPhone] - и выложили в сеть»
         (via d3, осторожно - ню!)

         2) «Мы разрабатываем электронный документооборот как компонент одной из систем электронного правительства. Электронное правительство, вопреки расхожему мнению, это не название системы и не сайт «Госуслуги», а способ взаимодействия ветвей государственной власти между собой и с гражданами. Наш документооборот существует с 2005 года и используется, в настоящее время, в Татарстане и Москве. [...] Все законопроекты, распоряжения, указания и так далее теперь движутся только в недрах системы, воплощаясь в бумагу только в тех случаях, когда взаимодействовать приходится с ведомствами, не подключенными к документообороту. [...] Используется три типа клиентских приложений, это веб-клиент, работающий из-под любого браузера, клиент для Айпада и клиент для тач-ноутов на базе Виндоуз. Последний используется всё реже и постепенно уходит в историю — его разрабатывали в те времена, когда Айпада ещё не было. Поскольку iOS более подходит под управление пальцем, да и весит Айпад меньше, чем тач-ноутбук, то вытеснение первых вторыми происходит с хорошей скоростью. На скриншоте выше — экран логина клиента под Айпад»
         (c) Евгений Степанищев at bolknote

         ...так во-от зачем нашему нанопрезиденту айпод! Он в нём не только твиты твитит, но и натурально может законопроекты подписывать - электронной подписью стилусом по дисплею!
         Ждём электронного взлома электронного правительства (Скарлетт Йохансон взломали же, а тут айпадов много, хоть один да откроется), и совершения какой-нибудь фигни :-) Скажем, принятия законопроекта, легализующего пиратство и педофилию :-)

         Шутка, да.

    << Previous Day 2011/09/15
    [Calendar]
    Next Day >>

About LJ.Rossia.org