|
Хитровывернутый вопрос про RTOS, с интервью.. |
|
|
|
Jul 31 2014, 01:00
|

Местный
  
Группа: Свой
Сообщений: 414
Регистрация: 8-06-06
Пользователь №: 17 897

|
Всем привет! Недавно был на интервью в одной компании и "застрял" на вопросе про RTOS. После недели поисков ответ так и не был найден.. Условие задачи такое: есть 5 потоков, каждый из них увеличивает в цикле общую переменную count на 1. После завершения работы этих потоков, значение count выводится на экран. Код unsigned int count = 0; void thread(void) { unsigned int i; for(i = 0; i < 5; i++) { count++; } }
void main(void) { thread_create(thread, 5); // Создаём 5 экземпляров потока thread и запускаем их thread_join(); // Ждём пока все 5 потоков завершатся printf("%u", count); // Выводим значение count на экран } Внимание вопрос: почему программа печатает 2?? Договорились с интервьювером, что операция count++ состоит из 3х ассемблерных команд: Код LDR reg, count ADD reg, #1 STR reg, count Т.к. переменная count не защищена ни мьютексом, ни критической секцией, самый пессимистичный вариант, который я "раскрутил" выглядит так: Код // начало работы thread1 LDR reg, count // count = 0, thread1.reg = 0 ADD reg, #1 // thread1.reg = 1 // thread1 вытеснен планировщиком, начало работы thread2 LDR reg, count // count = 0, thread2.reg = 0 ADD reg, #1 // thread2.reg = 1 STR reg, count // count = 1 // thread2 завершил работу, управление возвращается к thread1 STR reg, count // count = 1 т.е. в результате один поток делает override результата второго потока и count = 1 после выполнения всех потоков (а не 5, как было бы с мьютексом). Но: хоть один из потоков все равно увеличит count на 1 в этой схеме, т.е. в результате работы программы count будет не меньше, чем 5. Как же получается 2? (со слов интервьювера, он наблюдал такой эффект в реальном железе). Подсказка от интервьювера: результат не зависит ни от количества потоков, ни от количества итераций в цикле for
--------------------
Курильщик даташитов со стажем
|
|
|
|
|
 |
Сообщений в этой теме
InsolentS Хитровывернутый вопрос про RTOS Jul 31 2014, 01:00 RobFPGA Приветствую!
Скорее всего он "разводил... Jul 31 2014, 09:54 Fat Robot Переменная count не является volatile, поэтому пре... Jul 31 2014, 10:35 wangan Может у него был 8 битный микроконтроллер, а у нег... Jul 31 2014, 12:08 gerber Неправильно реализована функция printf на железке,... Jul 31 2014, 13:42 Mahagam QUOTE (gerber @ Jul 31 2014, 16:42) Непра... Jul 31 2014, 15:03 Lagman 25. Почему? Патамушта! (кооперативная, вытесн... Jul 31 2014, 15:55 InsolentS Прошу прощения, по условиям задачи RTOS вытесняюща... Jul 31 2014, 18:09 ViKo Для начала неплохо бы понять, в какой ОС есть функ... Jul 31 2014, 18:17 InsolentS Цитата(ViKo @ Jul 31 2014, 23:17) Для нач... Jul 31 2014, 18:27 Fedor Нагло врет ваш интервьюер, если поток будет 1 все ... Jul 31 2014, 19:15 DASM 99.9 % дело не вытеснении, на 32 разрядном проце к... Jul 31 2014, 19:57 ViKo Условная ОС не может быть проверена в железе, как ... Jul 31 2014, 20:00  andrew_b Цитата(ViKo @ Aug 1 2014, 09:54) А разве ... Aug 4 2014, 06:17 adnega ЦитатаПодсказка от интервьювера: результат не зави... Aug 1 2014, 05:59 ZASADA что возвращает вызываемая функция
void thread(void... Aug 1 2014, 06:28 ViKo Цитата(ZASADA @ Aug 1 2014, 09:28) что во... Aug 1 2014, 06:31 DASM А какой это язык программирования ? Aug 1 2014, 08:25 ZASADA типа с Aug 1 2014, 08:39 InsolentS На работу всё-таки взяли, попробую найти там этого... Aug 2 2014, 04:19 x893 Всё гораздо проще - просто посмотрите дебаггером -... Aug 3 2014, 13:29 InsolentS Цитата(x893 @ Aug 3 2014, 18:29) Всё гора... Aug 3 2014, 18:13  AlexandrY Цитата(InsolentS @ Aug 3 2014, 21:13) Спа... Aug 4 2014, 06:48 psL Типа ОСь очень реального времени Видимо 2, потому ... Aug 3 2014, 18:18 Lagman Цитата(psL @ Aug 3 2014, 22:18) Типа ОСь ... Aug 3 2014, 20:04  psL Цитата(Lagman @ Aug 4 2014, 00:04) Планир... Aug 3 2014, 21:53   AndrewN QUOTE (psL @ Aug 4 2014, 00:53) В реально... Aug 5 2014, 10:04    Mahagam QUOTE (AndrewN @ Aug 5 2014, 13:04) Ключе... Aug 5 2014, 10:09  kolobok0 Цитата(Lagman @ Aug 4 2014, 00:04) Планир... Aug 4 2014, 21:06   AlexandrY Цитата(kolobok0 @ Aug 5 2014, 00:06) вест... Aug 5 2014, 07:43 AndrewN QUOTE (InsolentS @ Jul 31 2014, 04:00) Не... Aug 5 2014, 09:57 AlexandrY Цитата(AndrewN @ Aug 5 2014, 12:31) P.S. ... Aug 5 2014, 10:01  AndrewN QUOTE (AlexandrY @ Aug 5 2014, 13:01) Да,... Aug 5 2014, 10:07   AlexandrY Цитата(AndrewN @ Aug 5 2014, 13:07) Да бр... Aug 5 2014, 10:14    AndrewN QUOTE (AlexandrY @ Aug 5 2014, 13:14) Есл... Aug 5 2014, 10:21  AndrewN QUOTE (AlexandrY @ Aug 5 2014, 13:01) Да ... Aug 5 2014, 10:09   AlexandrY Цитата(AndrewN @ Aug 5 2014, 13:09) Вы ме... Aug 5 2014, 10:19    AndrewN QUOTE (AlexandrY @ Aug 5 2014, 13:19) Мне... Aug 5 2014, 10:27     AlexandrY Цитата(AndrewN @ Aug 5 2014, 13:24) Совер... Aug 5 2014, 10:31      AndrewN QUOTE (AlexandrY @ Aug 5 2014, 13:31) гов... Aug 5 2014, 10:55 Mahagam QUOTE (AndrewN @ Aug 5 2014, 12:31) Хорош... Aug 5 2014, 10:04  AndrewN QUOTE (Mahagam @ Aug 5 2014, 13:04) решен... Aug 5 2014, 10:15   AlexandrY Цитата(AndrewN @ Aug 5 2014, 13:15) Мы же... Aug 5 2014, 10:24    den_po Цитата(AlexandrY @ Aug 5 2014, 14:24) Тик... Aug 5 2014, 12:29   Mahagam QUOTE (AndrewN @ Aug 5 2014, 13:15) Это п... Aug 5 2014, 10:55    AlexandrY Цитата(Mahagam @ Aug 5 2014, 13:55) какое... Aug 5 2014, 11:02    AndrewN QUOTE (Mahagam @ Aug 5 2014, 13:55) Ни од... Aug 5 2014, 11:27     Mahagam QUOTE (AndrewN @ Aug 5 2014, 14:27) Увы, ... Aug 5 2014, 11:37      AndrewN QUOTE (Mahagam @ Aug 5 2014, 14:37) вы то... Aug 5 2014, 12:39       AlexandrY Цитата(AndrewN @ Aug 5 2014, 15:30) Я поп... Aug 5 2014, 12:42        AndrewN QUOTE (AlexandrY @ Aug 5 2014, 16:42) Ну ... Aug 5 2014, 12:50         AlexandrY Цитата(AndrewN @ Aug 5 2014, 15:50) P.S. ... Aug 6 2014, 10:48       AlexandrY Цитата(AndrewN @ Aug 5 2014, 15:39) Ребят... Aug 5 2014, 12:54       Mahagam QUOTE (AndrewN @ Aug 5 2014, 15:39) Неизв... Aug 5 2014, 15:09        AndrewN QUOTE (Mahagam @ Aug 5 2014, 19:09) отсле... Aug 5 2014, 16:06     AlexandrY Цитата(AndrewN @ Aug 5 2014, 14:27) Алгор... Aug 5 2014, 12:26 ViKo Ну, теоретически (практически тоже) можно допустит... Aug 5 2014, 10:28 adnega CODE задача А задача В задача Х
... Aug 5 2014, 12:55 juvf аш 4 страници настучали....
1) а кто пробовал это... Aug 5 2014, 18:05 AndrewN Жаль, что не удалось узнать, что думает экзаминато... Aug 7 2014, 12:35 InsolentS Цитата(AndrewN @ Aug 7 2014, 18:35) Жаль,... Jan 24 2015, 02:52
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|
|