<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="he">
	<id>https://www.yisraelpedia.com/index.php?action=history&amp;feed=atom&amp;title=%D7%A4%D7%A2%D7%95%D7%9C%D7%94_%D7%90%D7%98%D7%95%D7%9E%D7%99%D7%AA</id>
	<title>פעולה אטומית - היסטוריית גרסאות</title>
	<link rel="self" type="application/atom+xml" href="https://www.yisraelpedia.com/index.php?action=history&amp;feed=atom&amp;title=%D7%A4%D7%A2%D7%95%D7%9C%D7%94_%D7%90%D7%98%D7%95%D7%9E%D7%99%D7%AA"/>
	<link rel="alternate" type="text/html" href="https://www.yisraelpedia.com/index.php?title=%D7%A4%D7%A2%D7%95%D7%9C%D7%94_%D7%90%D7%98%D7%95%D7%9E%D7%99%D7%AA&amp;action=history"/>
	<updated>2026-09-14T05:48:45Z</updated>
	<subtitle>היסטוריית הגרסאות של הדף הזה בוויקי</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://www.yisraelpedia.com/index.php?title=%D7%A4%D7%A2%D7%95%D7%9C%D7%94_%D7%90%D7%98%D7%95%D7%9E%D7%99%D7%AA&amp;diff=226070&amp;oldid=prev</id>
		<title>imported&gt;Yishaybg ב־18:41, 16 באוגוסט 2022</title>
		<link rel="alternate" type="text/html" href="https://www.yisraelpedia.com/index.php?title=%D7%A4%D7%A2%D7%95%D7%9C%D7%94_%D7%90%D7%98%D7%95%D7%9E%D7%99%D7%AA&amp;diff=226070&amp;oldid=prev"/>
		<updated>2022-08-16T18:41:53Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;דף חדש&lt;/b&gt;&lt;/p&gt;&lt;div&gt;ב[[מדעי המחשב]], &amp;#039;&amp;#039;&amp;#039;פעולה אטומית&amp;#039;&amp;#039;&amp;#039; היא רצף של [[סט פקודות|פקודות מכונה]] או פקודת מכונה יחידה שיבוצעו על ידי [[מעבד]], מבלי שיכולה להיעשות [[החלפת הקשר]] בזמן ביצוען ומבלי שרכיב אחר במחשב יוכל להבחין או לשנות משהו בכל מצב ביניים אלא רק במצב ההתחלתי או הסופי של הפעולה, למשל על ידי חסימת [[אפיק נתונים|אפיק הנתונים]]{{הערה|[https://software.intel.com/en-us/forums/intel-performance-bottleneck-analyzer/topic/308523 bus lock]}}. חלק מהפעולות האטומיות יכולות להצליח או להיכשל ואילו אחרות תמיד מצליחות.&lt;br /&gt;
&lt;br /&gt;
פעולות אטומיות מהוות לעיתים תחליף יעיל יותר לשימוש ב[[מנעול (מדעי המחשב)|מנעולים]], ועל כן [[אלגוריתם חסר נעילות|אלגוריתמים חסרי נעילות]] נדרשים לעשות שימוש בפעולות אטומיות.&lt;br /&gt;
&lt;br /&gt;
==הצורך בפעולה אטומית==&lt;br /&gt;
להמחשת הצורך בפעולה אטומית, נסתכל על הפשטה של הפקודות שמרכיבות את פעולת הקידום (הגדלה ב-1 של ערך בזיכרון, increment):&lt;br /&gt;
 1. התהליך קורא מהזיכרון את הערך שבמקום X&lt;br /&gt;
 2. התהליך מגדיל את הערך ב-1&lt;br /&gt;
 3. התהליך כותב למקום X את הערך החדש&lt;br /&gt;
&lt;br /&gt;
כעת נסתכל על 2 תהליכים שמבצעים פעולת קידום על אותו מקום בזיכרון. כיוון שיש לנו [[מעבד]] יחיד, הרי שכדי ששני התהליכים יבצעו את הפעולה, חייבת להיות [[החלפת הקשר]].&lt;br /&gt;
&lt;br /&gt;
====תרחיש ראשון (תקין)====&lt;br /&gt;
 1. תהליך &amp;#039;&amp;#039;&amp;#039;א&amp;#039;&amp;#039;&amp;#039;&amp;#039; קורא מהזיכרון את הערך שבמקום X&lt;br /&gt;
 2. תהליך &amp;#039;&amp;#039;&amp;#039;א&amp;#039;&amp;#039;&amp;#039;&amp;#039; מגדיל את הערך ב-1&lt;br /&gt;
 3. תהליך &amp;#039;&amp;#039;&amp;#039;א&amp;#039;&amp;#039;&amp;#039;&amp;#039; כותב למקום X את הערך החדש&lt;br /&gt;
 מתבצעת &amp;#039;&amp;#039;&amp;#039;החלפת הקשר&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 4. תהליך &amp;#039;&amp;#039;&amp;#039;ב&amp;#039;&amp;#039;&amp;#039;&amp;#039; קורא מהזיכרון את הערך שבמקום X&lt;br /&gt;
 5. תהליך &amp;#039;&amp;#039;&amp;#039;ב&amp;#039;&amp;#039;&amp;#039;&amp;#039; מגדיל את הערך ב-1&lt;br /&gt;
 6. תהליך &amp;#039;&amp;#039;&amp;#039;ב&amp;#039;&amp;#039;&amp;#039;&amp;#039; כותב למקום X את הערך החדש&lt;br /&gt;
&lt;br /&gt;
הערך גדל פעמיים: פעם על ידי תהליך א&amp;#039;, ולאחר מכן פעם נוספת על ידי תהליך ב&amp;#039;. זו התוצאה הרצויה.&lt;br /&gt;
&lt;br /&gt;
====תרחיש שני (תוצאה שגויה)====&lt;br /&gt;
 1. תהליך &amp;#039;&amp;#039;&amp;#039;א&amp;#039;&amp;#039;&amp;#039;&amp;#039; קורא מהזיכרון את הערך שבמקום X&lt;br /&gt;
 2. תהליך &amp;#039;&amp;#039;&amp;#039;א&amp;#039;&amp;#039;&amp;#039;&amp;#039; מגדיל את הערך ב-1&lt;br /&gt;
 מתבצעת &amp;#039;&amp;#039;&amp;#039;החלפת הקשר&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 3. תהליך &amp;#039;&amp;#039;&amp;#039;ב&amp;#039;&amp;#039;&amp;#039;&amp;#039; קורא מהזיכרון את הערך שבמקום X&lt;br /&gt;
 4. תהליך &amp;#039;&amp;#039;&amp;#039;ב&amp;#039;&amp;#039;&amp;#039;&amp;#039; מגדיל את הערך ב-1&lt;br /&gt;
 5. תהליך &amp;#039;&amp;#039;&amp;#039;ב&amp;#039;&amp;#039;&amp;#039;&amp;#039; כותב למקום X את הערך החדש&lt;br /&gt;
 מתבצעת &amp;#039;&amp;#039;&amp;#039;החלפת הקשר&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 6. תהליך &amp;#039;&amp;#039;&amp;#039;א&amp;#039;&amp;#039;&amp;#039;&amp;#039; כותב למקום X את הערך החדש&lt;br /&gt;
הערך גדל לבסוף רק פעם אחת: השינוי שביצע תהליך ב&amp;#039; נדרס על ידי הכתיבה לזיכרון של תהליך א&amp;#039;.&lt;br /&gt;
אם פעולת ההגדלה הייתה פעולה אטומית הרי ש[[החלפת הקשר|החלפת ההקשר]] שהתבצעה אחרי שלב 2 לא הייתה אפשרית, והשגיאה הייתה נמנעת.&lt;br /&gt;
&lt;br /&gt;
ב[[עיבוד מקבילי]] הסיכון גדול עוד יותר כיוון שמספר מעבדים פועלים במקביל ועובדים על זיכרון משותף, על כן חשיבות השימוש בפעולות אטומיות גדלה.&lt;br /&gt;
&lt;br /&gt;
==פעולות אטומיות נפוצות==&lt;br /&gt;
מעבדים שונים במחשבים שונים מאפשרים פעולות אטומיות שונות. פעולות נפוצות הן:&lt;br /&gt;
* קידום – הוספת 1 (increment) או החסרת 1 (decrement) מיחידת זיכרון.&lt;br /&gt;
* [[פקודת השמה|השמה]] – החלפת ערך ביחידת זיכרון לערך חדש.&lt;br /&gt;
* השוואה והחלפה – החלפת ערך ביחידת זיכרון לערך חדש רק אם יש ערך מסוים ביחידת הזיכרון לפני ההחלפה. פעולה זו יכולה להיכשל.&lt;br /&gt;
* פעולות אריתמטיות – הפעלת פעולה אריתמטית על יחידת זיכרון (כגון הוספה, החסרה, הכפלה וכדומה).&lt;br /&gt;
* פעולות ביטים – הפעלת פעולת ביטים על יחידת זיכרון (כגון [[AND]], [[OR]], [[XOR]] וכדומה).&lt;br /&gt;
רוב הפעולות האטומיות מחזירות את הערך הקודם שהיה ביחידת הזיכרון לפני הפעולה.&lt;br /&gt;
&lt;br /&gt;
==ראו גם==&lt;br /&gt;
* [[מנעול (תוכנה)]]&lt;br /&gt;
* [[סמפור (מדעי המחשב)]]&lt;br /&gt;
* [[פעולה בוליאנית]]&lt;br /&gt;
&lt;br /&gt;
==קישורים חיצוניים==&lt;br /&gt;
* [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2047.html הצעה לפעולות אטומיות כחלק מהתקן הבא של שפת ++C]&lt;br /&gt;
* [http://msdn.microsoft.com/en-us/library/ms686360(VS.85).aspx#ctl00_mainContentContainer_ctl35 פעולות אטומיות במערכת ההפעלה חלונות]&lt;br /&gt;
&lt;br /&gt;
==הערות שוליים==&lt;br /&gt;
{{הערות שוליים}}&lt;br /&gt;
&lt;br /&gt;
{{מדעי המחשב}}&lt;br /&gt;
&lt;br /&gt;
[[קטגוריה:מערכת הפעלה]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Yishaybg</name></author>
	</entry>
</feed>