גיליון תשובות מספר נבחן: (30 נקודות) שאלה סעיף א (0 נקודות) public boolea checkidex(it idex){ retur idex >= 0 && idex <= _arrlegth public boolea checkvalue(it value){ retur (value == INITIALIZED) (value == UNSET) (value >= 0 && value <= _arrlegth); Ivariat: (_arr!= ull) ad for each cell i _arr, checkvalue returs true public boolea checkiv(){ if (_arr == ull) retur false; for (it a : _arr){ if (!checkvalue(a)) retur false; retur true; סעיף ב (0 נקודות) שימו לב שבסעיפים,2 אין מקביליות a) 0's leader is 0 's leader is 0 b) 's leader is 0's leader is c) 's leader is 0 's leader is 's leader is 0's leader is 0 0's leader is 0's leader is 0 השורה של 0 יכולה להיות מודפסת לפני השורה של סעיף ג (4 נקודות) public void ru(){ sychroized(_memory){
//syc //ru סעיף ד (6 נקודות) המנהיג יהיה ה Processor הראשון שיבצע את המתודה CBS כדי לברר האם הוא הראשון שולחים את הערך 0 כפרמטר cmp למתודה, כדי לוודא שלא נבחר עדיין מנהיג (השדה _val עדיין שלילי) במידה ולא נבחר עדיין מנהיג יהיה זה ה Processor (טכנית נשלח _id+ כפרמטר הפחתת בסיכום) עבור מקרה קצה של (_id=0 (תוך _id ולא swp class Processor implemets Ruable{ private CompareNSwap _cs; private it _id; public Processor(it id, CompareNSwap cs){ _cs = cs; _id = id; public void ru(){ it leader = _cscns(0, _id+) - ; Systemoutpritl(_id+ 's leader is +leader); 6) שאלה 2 נקודות) 42 30 0 30 42 30 30 30 4) שאלה 3 נקודות) A B ~B ~A סעיף א (4 נקודות) סעיף ב (4 נקודות) b = b2; בקטע הקוד הנתון מבוצעת השמה של אובייקטים: נשים לב כי לא מוגדר במחלקות A ו B אופרטור השמה, כך שתבוצע כברירת מחדל השמה bit by bit מכך נובעות שתי בעיות בניהול זיכרון: 2
_,p_ של b אינו משתחרר,_p2 :Memory Leak הזיכרון שכתובותיו ניתנות על ידי השדות :Null Poiter בגמר הבלוק בו הוגדר b2 מתבצע ה destructor שלו, המנקה את הזכרון המוצבע על ידי שדותיו _,p_, אך עקב פעולת ההשמה הנ"ל שדותיו של b מצביעים לאותם מקומות מחוקים בביצוע השורה,_p2 האחרונה מתבצעת אף פניה לזיכרון מחוק זה הערה: אין בעיה של o virtual destructor כי b ו b2 הינם אובייקטים בעלי טיפוס סטטי הידוע בזמן קומפילציה (הייתה בעיה רק אם הם היו טיפוסים דינאמיים, שאופיים המדויק נקבע רק בזמן ריצה, כמו *A) בכל מקרה לא ירדו נקודות למי שטען זאת class A { A& operator=(cost A& other) { if (this!= &other) (*_p) = (*other_p); retur (*this); ; סעיף ב (6 נקודות) יש להגדיר אופרטור השמה עבור המחלקות A ו B: class B : public A { B& operator=(cost B& other) { if (this!= &other) { ((A)*this) = ((A)other); (*_p2) = (*other_p2); retur (*this); ; (30 נקודות) socketjoigroup(groupaddress); socketleavegroup(groupaddress); 4 (4 נקודות) (4 נקודות) שאלה סעיף א סעיף ב הלקוח הוא יוזם ההתקשרות ועליו לשלוח לשרת הודעה עם שם הסרט המבוקש: movie: <ame of the movie> 3
out = ew PritWriter(outsocketgetOutputStream(), true); outpritl("movie: " + "The Cabiet of Doctor Caligari"); packet = ew DatagramPacket(ew byte[024], 024); while (keepwatchig()) { isocketreceive(packet); playerplay(packetgetdata()); סעיף ג (6 נקודות) סעיף ד (4 נקודות) במקרה שלנו רוב העומס נופל על עבודת התקשורת (שליחת סרטים) ועל כן נעדיף הרבה thread -ים שיטפלו בשליחת סרטים לעומת זאת, עיבוד ההודעה שבה מבוקש שם הסרט אינו צורך זמן ואין צורך להקצות לו מספר רב של thread -ים DatagramChael _dgchael; Strig _movie; IterCosketAddress _clietaddress; @: סעיף ה (2 נקודות) צריך להוסיף ל CoectioHadler את השדות _movie = processmessage(message); _dgchael = DatagramChaelope(); _dgchaelcofigureblockig(false); _clietaddress = ew IetSocketAddress(addressgetAddress(), 2007); dgchaelcoect(_clietaddress); dgchaelregister(_datagetselector(), OP_WRITE, this); @2+3: DatagramChael _dgchael; Strig _movie; IetSocketAddress _clietaddress; השדות של DataSeder יהיו: DataSederTask(DatagramChael dgchael, Strig movie, IetSocketAddress clietaddress) { _dgchael = dgchael; _movie = movie; _clietaddress = clietaddress; _datagetexecutor()execute( ew DataSederTask(_dgChael, _movie, _clietaddress)); הבנאי: יצירת :DataSederTask 4
@4: try { File file = ew File(_movie); FileIputStream filei = ew FileIputStream(file); byte[] buf = ew byte[024]; while (iread(buf)!=-) outsed(buf, _clietaddress); catch (Exceptio e){ (0 נקודות) שאלה 5 סעיף א (5 נקודות) SELECT DISTINCT TeamsCotact, GamesStadium adium FROM Teams OUTER LEFT JOIN Games ON (TeamsClub = GamesClub AND TeamsCity = GamesCity) OR (TeamsClub = GamesClub2 AND TeamsCity = GamesCity2) סעיף ב (5 נקודות) Teams Games Stadiums Club City Cotact Score Roud Club City Club2 City2 Stadium GoalsA GoalsB Name Address Capacity 5