Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: help:задачка по многопоточности  (Прочитано 9468 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
ary
Гость
« : 25-01-2007 13:21 » 

Функция MyFunc работает параллельно в 2-х потоках .
Сколько итераций цикла "while" будет выполнено?

 
Код:
 int a = 1000;
   void MyFunc()
  {
        while(a>0)
       {
           a = a-1;
       }
  }
     
      a)ровно 1000
      b) <=1000
      c)  =>1000
      d) бесконечный цикл


Записан
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #1 : 25-01-2007 13:26 » 

c) =>1000
Записан

Странно всё это....
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #2 : 25-01-2007 13:28 » 

а если оптимизатор хороший то не одной Улыбаюсь
Записан

Странно всё это....
ary
Гость
« Ответ #3 : 25-01-2007 14:27 » 

c) =>1000
Спасибо.А почему,можно объяснить?
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #4 : 25-01-2007 14:28 » 

а если оптимизатор хороший то не одной Улыбаюсь

5+!!!

С плохим оптимизатором в таком виде без доп. условий задачка не имеет решения. Ибо не определено, когда какой тред будет обращаться к а.

ary, учи матчасть про синхронизацию тредов.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #5 : 25-01-2007 15:00 » 

Джон, поддерживаю

ary, довольно просто тело цикла и операция сравнения не атомарны это значит, что ядро может отдать квант времени посреди сравнения или вычитания

например оба потока в начале сравнения
a=1
один из потоков проверяет условие и проходит дальше т.к. a>0
и не дойдя до a = a - 1 у него отбирают управление и отдают другому потоку
другой поток тоже проверяет условие и тоже a>0
и оба зашли в тело
можно предположить что оба из них вычтут из a еденицу
и a будет равно -1
но если один поток остановлен как раз перед обновлением значения
а второй поток его обгоняет и делает сам обновление
в a ляжет 0  тут просыпается второй поток который уверен, что a не изменилось пока он спал и тоже записывает туда 0
на выходе из цикла ты имеещь
2 прохода по телу цикла, но изменение a на 1

если ты a внесёшь в тело функции, то неопределёность исчезнет

в общем, цепь простых рассуждений даёт ответ на кучу вопросов Улыбаюсь
Записан

Странно всё это....
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #6 : 25-01-2007 15:09 » 

Добавлю, равенство 1000 будет достигнуто при условии, что оба треда получают доступ к а строго по очереди, тогда каждый из них выполнит по 500 итераций. Но это опять доп. условие. Ага
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
ary
Гость
« Ответ #7 : 25-01-2007 15:57 » 

LogRus, Джон, большое спасибо.
иду учить матчасть.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines