לדלג לתוכן

תרגול מודל הזיכרון של השפה

כתבו שלושה ניתוחים נפרדים, משום שלא כל תקלה מקבילית היא data race.

א. שני threadים מבצעים מיליון פעמים load ואז store של מונה אטומי עם relaxed. הסבירו מדוע אפשר לאבד עדכונים בלי data race, ותקנו באמצעות פעולה משולבת.

ב. יצרן כותב מחרוזת רגילה ומפרסם דגל אטומי עם relaxed, והצרכן קורא דגל עם relaxed ואז את המחרוזת. ציירו את החוליה החסרה בהוכחת happens-before. אין להציג הרצה תקינה לכאורה כהוכחה.

ג. יצרן משתמש ב־release והצרכן ב־acquire, אבל היצרן משנה שוב את המחרוזת אחרי הפרסום. הסבירו מדוע השינוי הנוסף אינו מוגן והציעו פרוטוקול של העברת בעלות.

כתבו גם פונקציה שמגדילה מונה אטומי רק אם הוא קטן ממגבלה, באמצעות compare_exchange_weak. בדקו שהפונקציה אינה עוברת את הגבול תחת ארבעה עובדים, ושכישלון לעמוד במגבלה אינו משנה את המונה.