ומלואו כל נושא.
במילים פשוטות, בגדול כשיש לך 2 ליבות אז יש לך בעצם "2 ערוצי תקשורת". כמו 2 מעבדים נפרדים על לוח אחד אבל שיש להם זכרון משותף ברמה נמוכה יותר מאשר ה-RAM (בדר"כ קאש L2-L3, בנוסף ל-RAM כמובן).
זאת אומרת שמערכת ההפעלה יכולה לשלוח הרצה של חישוב א' בליבה 1 וחישוב ב' בליבה 2 במקביל ובאמצעות כלי סנכרון די מטורפים built in במעבד.מה שאתה יכול להבין זה כשיש 2 תהליכים בלתי תלויים שרצים במקביל, אתה מקבל כפול ביצועים (ואפילו יותר בזכות cache coherence).
מה שזה עוד אומר זה שיש חוטים או תהליכים שמשתפים זכרון אז אתה מסוגל להבין שיש בעייתיות.
לצורך העניין שני חוטים משתפים משתנה x שמאותחל ל-1.
חוט א' מריץ x = x+2 וחוט ב' מריץ x = x*4.
מה הערך של x שיתקבל בסיום ריצת התוכנית?
12, 6, 3, 4 ובעצם אפילו כל ערך אפשרי. אתה מבין את הבעייתיות?