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

תוכן שנמחק תוכן שנוסף
Xqbot (שיחה | תרומות)
תיקון: קישור עצמיx‏1, כותרותx‏2, סדר כותרות [JS]
שורה 4:
 
==הצורך בפעולה אטומית==
להמחשת הצורך בפעולה אטומית, נסתכל על הפשטה של הפקודות שמרכיבות את פעולת הקידום (הגדלה ב-1 של ערך בזיכרון, increment):
1. התהליך קורא מהזיכרון את הערך שבמקום X
2. התהליך מגדיל את הערך ב-1
שורה 10:
 
כעת נסתכל על 2 תהליכים שמבצעים פעולת קידום על אותו מקום בזיכרון. כיוון שיש לנו [[מעבד]] יחיד, הרי שכדי ששני התהליכים יבצעו את הפעולה, חייבת להיות [[החלפת הקשר]]
 
====תרחיש ראשון (תקין):====
1. תהליך '''א'''' קורא מהזיכרון את הערך שבמקום X
2. תהליך '''א'''' מגדיל את הערך ב-1
3. תהליך '''א'''' כותב למקום X את הערך החדש
מתבצעת '''החלפת הקשר'''
4. תהליך '''ב'''' קורא מהזיכרון את הערך שבמקום X
5. תהליך '''ב'''' מגדיל את הערך ב-1
שורה 20 ⟵ 21:
 
הערך גדל פעמיים: פעם על ידי תהליך א', ולאחר מכן פעם נוספת על ידי תהליך ב'. זו התוצאה הרצויה.
 
====תרחיש שני (תוצאה שגויה):====
1. תהליך '''א'''' קורא מהזיכרון את הערך שבמקום X
2. תהליך '''א'''' מגדיל את הערך ב-1
שורה 30 ⟵ 32:
6. תהליך '''א'''' כותב למקום X את הערך החדש
הערך גדל לבסוף רק פעם אחת: השינוי שביצע תהליך ב' נדרס על ידי הכתיבה לזיכרון של תהליך א'.
במידה ופעולת ההגדלה הייתה [[פעולה אטומית]] הרי ש[[החלפת הקשר|החלפת ההקשר]] שהתבצעה אחרי שלב 2 לא הייתה אפשרית, והשגיאה הייתה נמנעת.
 
ב[[עיבוד מקבילי]] הסיכון גדול עוד יותר כיוון שמספר מעבדים פועלים במקביל ועובדים על זיכרון משותף, על כן חשיבות השימוש בפעולות אטומיות גדלה.
 
==פעולות אטומיות נפוצות==
שורה 42 ⟵ 44:
* פעולות ביטים - הפעלת פעולת ביטים על יחידת זיכרון (כגון and, or, xor וכדומה).
רוב הפעולות האטומיות מחזירות את הערך הקודם שהיה ביחידת הזיכרון לפני הפעולה.
 
==ראו גם==
* [[מנעול קריאה כתיבה]]
* [[מנעול (מדעי המחשב)]]
* [[סמפור (מדעי המחשב)]]
* [[פעולה בוליאנית]]
 
==קישורים חיצוניים==
* [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2047.html הצעה לפעולות אטומיות כחלק מהתקן הבא של שפת ++C]
* [http://msdn.microsoft.com/en-us/library/ms686360(VS.85).aspx#ctl00_mainContentContainer_ctl35 פעולות אטומיות במערכת ההפעלה חלונות]
 
==ראו גם==
*[[מנעול קריאה כתיבה]]
*[[מנעול (מדעי המחשב)]]
*[[סמפור (מדעי המחשב)]]
*[[פעולה בוליאנית]]
 
[[קטגוריה:מערכת הפעלה]]