פעולה אטומית – הבדלי גרסאות

תוכן שנמחק תוכן שנוסף
Selalerer (שיחה | תרומות)
←‏ראו גם: הוספת "פעולה בולאנית".
Yonidebot (שיחה | תרומות)
מ בוט החלפות: הייתה ; על ידי; לעתים; זיכרון;
שורה 1:
ב[[מדעי המחשב]], '''פעולה אטומית''' הינה רצף של [[סט פקודות|פקודות מכונה]] או פקודת מכונה יחידה שיבוצעו על ידי [[מעבד]], מבלי שיכולה להיעשות [[החלפת הקשר]] בזמן ביצוען ומבלי שרכיב אחר במחשב יוכל להבחין בכל מצב ביניים אלא רק במצב ההתחלתי או הסופי של הפעולה. חלק מהפעולות האטומיות יכולות להצליח או להיכשל ואילו אחרות תמיד מצליחות.
 
פעולות אטומיות מהוות לעיתיםלעתים תחליף יעיל יותר לשימוש ב[[מנעול (מדעי המחשב)|מנעולים]], ועל כן [[אלגוריתם חסר נעילות|אלגוריתמים חסרי נעילות]] נדרשים לעשות שימוש בפעולות אטומיות.
 
==הצורך בפעולה אטומית==
להמחשת הצורך בפעולה אטומית, נסתכל על הפשטה של הפקודות שמרכיבות את פעולת הקידום (הגדלה ב-1 של ערך בזכרוןבזיכרון, increment):
1. התהליך קורא מהזכרוןמהזיכרון את הערך שבמקום X
2. התהליך מגדיל את הערך ב-1
3. התהליך כותב למקום X את הערך החדש
 
כעת נסתכל על 2 תהליכים שמבצעים פעולת קידום על אותו מקום בזכרוןבזיכרון. כיוון שיש לנו [[מעבד]] יחיד, הרי שכדי ששני התהליכים יבצעו את הפעולה, חייבת להיות [[החלפת הקשר]]
====תרחיש ראשון (תקין):====
1. תהליך '''א'''' קורא מהזכרוןמהזיכרון את הערך שבמקום X
2. תהליך '''א'''' מגדיל את הערך ב-1
3. תהליך '''א'''' כותב למקום X את הערך החדש
מתבצעת '''החלפת הקשר'''
4. תהליך '''ב'''' קורא מהזכרוןמהזיכרון את הערך שבמקום X
5. תהליך '''ב'''' מגדיל את הערך ב-1
6. תהליך '''ב'''' כותב למקום X את הערך החדש
 
הערך גדל פעמיים: פעם ע"יעל ידי תהליך א', ולאחר מכן פעם נוספת על ידי תהליך ב'. זו התוצאה הרצויה.
====תרחיש שני (תוצאה שגויה):====
1. תהליך '''א'''' קורא מהזכרוןמהזיכרון את הערך שבמקום X
2. תהליך '''א'''' מגדיל את הערך ב-1
מתבצעת '''החלפת הקשר'''
3. תהליך '''ב'''' קורא מהזכרוןמהזיכרון את הערך שבמקום X
4. תהליך '''ב'''' מגדיל את הערך ב-1
5. תהליך '''ב'''' כותב למקום X את הערך החדש
מתבצעת '''החלפת הקשר'''
6. תהליך '''א'''' כותב למקום X את הערך החדש
הערך גדל לבסוף רק פעם אחת: השינוי שביצע תהליך ב' נדרס ע"יעל ידי הכתיבה לזכרוןלזיכרון של תהליך א'.
במידה ופעולת ההגדלה היתההייתה [[פעולה אטומית]] הרי ש[[החלפת הקשר|החלפת ההקשר]] שהתבצעה אחרי שלב 2 לא היתההייתה אפשרית, והשגיאה היתההייתה נמנעת.
 
ב[[עיבוד מקבילי]] הסיכון גדול עוד יותר כיוון שמספר מעבדים פועלים במקביל ועובדים על זכרוןזיכרון משותף, על כן חשיבות השימוש בפעולות אטומיות גדלה.
 
==פעולות אטומיות נפוצות==