פעולה אטומית – הבדלי גרסאות
תוכן שנמחק תוכן שנוסף
מ בוט מוסיף: uk:Атомарна операція |
תיקון: קישור עצמיx1, כותרותx2, סדר כותרות [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 את הערך החדש
הערך גדל לבסוף רק פעם אחת: השינוי שביצע תהליך ב' נדרס על ידי הכתיבה לזיכרון של תהליך א'.
במידה ופעולת ההגדלה הייתה
ב[[עיבוד מקבילי]] הסיכון גדול עוד יותר כיוון שמספר מעבדים פועלים במקביל ועובדים על זיכרון משותף, על כן חשיבות השימוש בפעולות אטומיות גדלה.
==פעולות אטומיות נפוצות==
שורה 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 פעולות אטומיות במערכת ההפעלה חלונות]
▲==ראו גם==
▲*[[מנעול קריאה כתיבה]]
▲*[[מנעול (מדעי המחשב)]]
▲*[[סמפור (מדעי המחשב)]]
▲*[[פעולה בוליאנית]]
[[קטגוריה:מערכת הפעלה]]
|