Синхронизационен проблем

12 отговора 833 прегледа
#1

Синхронизационен проблем

Та значи задачата е:

Имаме един двулентов път, по които се движат коли в двете посоки
(да кажем наляво и надясно). На пътя обаче има мост, широк колкото една кола и по него могат да минават коли само от едната посока или само отдругата, докато противоположната посока коли изчакват да минат всички отсрещни коли. Какви синхронизационни обекти ще използвате за управление на трафика през моста в едната и другата посока. Тоест, как ще изглеждат тредовете:

ОООООООООООООООООООООООООООО
Х Х Х Х -> --------- мост-------- <- ХХХХХХХ
ОООООООООООООООООООООООООООО


int ThreadCarТоRight()
.....

int ThreadCarТоLeft()
....

Отговор
в отговор на Drum #2

Re: Синхронизационен проблем

koja e taq naivna firma kydeto si dava testovite zadachi 'za vkyshti'?

Отговор
в отговор на Drum #3

Re: Синхронизационен проблем

Bih kazal che semaphors praviat tochno tova.
Ima si gotova realizacia za tiah.

Отговор
в отговор на posetitel #4

Re: Синхронизационен проблем

Работата е там, чв не са само семафори, а има 1 мутекс първо, по който всеки преминаващ трябва да изчака и допълнително се използва семафор - даже два семафора за двете посоки - нещо от рода:

int g_carcount = -1;

...
//Moving Left

wait(mitex_move);

InterlockedIncrement(g_carcount);

if(g_carcount == 0) //first car in that direction
wait(semaphore_dir_left);

MoveCarLeft();

InterlockedDecrement (g_carcount);

if(g_carcount < 0) //no cars in that direction anymore
release(semaphore_dir_right) //allow movemеnt in another direction

release(mitex_move);
...

Мисля, че е това, ама не съм го проверявал за deadlock

Отговор
в отговор на Drum #5

Re: Синхронизационен проблем

Каквото си искаш - мутекси, критични секции, семафори - u name it

ПС. Като те гледам какви въпроси задаваш, май по-добре е да седнеш малко да поучиш (има няма 2-3 годинки), и после да ревеш какви трудни задачи давали по интервютата.

Отговор
в отговор на Drum #6

Re: Синхронизационен проблем

Tova ma nakara da se zamislq... v parviq moment vikam tova prosto - ako e za edna kola (polzvam java che go poznavam nai dobre):
class Bridge {
public synchronized moveCarToRight(Car car) {...}
public synchronized moveCarToLeft(Car car) {...}
}
Samo edna kola na mosta... Ako imame poredici togava moje da razshirim Car do neshto ot toda na CarRow v koqto sedqt vsichki koli v momenta ot ednata strana na mosta... no tova sam go mislil samo kato statichen variant... ami ako taq redica trqbva da se promenq, v smisal dinamichno da se dobavqt koli ??? ami moje i gornoto da svarshi rabota ama oshte ne sam go doobmislil...

Отговор
в отговор на Drum #7

Re: Синхронизационен проблем

Бих ти препоръчал да ползваш CEvent. Доста по евтино е. Може и за двигателите да ти остане време да синхронизираш.

Отговор
в отговор на lngon #8

Re: Синхронизационен проблем

lngon, започваш да напипваш същността на проблема! А пък gruhal нека си груха, че е просто. Да, просто е да сложиш един мутекс и да пускаш само една кола по моста...да, просто е да сложиш по един семафор с броя на колите от дадена страна и да пропускаш n коли от едната посока, после въртиш другата посока - да речем m коли и т.н. Какв обаче става, ако дойдат още коли и трафика е с различна натовареност през деня - че ти се завие главата от превлючване

Номера е да се направи "интелигентен светофар", който "вижда" броя на колите, пуска ги, после, като няма коли от едната страна, пуска тези от другата и т.н. - ситуацията е динамична...

Отговор
в отговор на Drum #9

Re: Синхронизационен проблем

Какво му е интелигентното? И какъв е проблема.

Като доиде кола, се сигнализира event/condition variable. Заключва се мутекса. Преминават всички коли, чакащи от страната на дошлата кола. Отключва се мутекса.

Отговор
в отговор на Pesho® #10

Re: Синхронизационен проблем

Проблема, Пешо, е само в главата на Друм - "какви синхронизационни примитиви", сега започва да блещи за натовареност на движението, потенциални отвличания от извънземни и роботи бутащи колите по стълби.

Отговор
в отговор на Drum #11

Re: Синхронизационен проблем



Отговор
в отговор на Potencialen emigrant #12

Re: Синхронизационен проблем

Ееее някой да внесе здрав разум в дискусията и да покаже, че най-големия примитив (ама наистина примитив) за синхронизация на пътното движение е катаджия размахващ хранилката... опа -- палката.

--
"Agile is a mindset, not a set of practices, rules, or tools."
Tom Poppendieck
Отговор
в отговор на Дeшeв #13

Re: Синхронизационен проблем

Яко !!!

Отговор