Os-1 6

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 34

‫اٌسٕت اٌشابؼت‬

‫ٔظُ حشغ‪1 ً١‬‬

‫اٌّحبػشة اٌسبدست‬
‫‪Synchronization‬‬
‫د‪ .‬اٌّثٕ‪ ٝ‬خؼش‬ ‫وٍ‪١‬ت اٌ‪ٕٙ‬ذست اٌّؼٍ‪ِٛ‬بح‪١‬ت‬
‫اٌّحبػشة اٌسببؼت‪ :‬اٌّفشداث اٌشئ‪١‬س‪١‬ت‬
‫ِف‪ َٛٙ‬اٌخ‪ٛ‬اص‪Concurrency ٞ‬‬ ‫‪‬‬
‫االحظبي ب‪ ٓ١‬اٌؼٍّ‪١‬بث‬ ‫‪‬‬
‫حٕبفس اٌؼٍّ‪١‬بث ( ‪)process competition‬‬ ‫‪‬‬
‫حبٌت اٌسببق ( ‪) race condition‬‬ ‫‪‬‬
‫ِشىٍت اٌّمطغ اٌحشج‬ ‫‪‬‬
‫ّٔبرج اٌحٍ‪ٛ‬ي ٌّشىٍت اٌّمطغ اٌحشج‬ ‫‪‬‬
‫ِشىٍت إٌّخح ‪ٚ‬اٌّسخ‪ٍٙ‬ه (‪)producer-consumer‬‬ ‫‪‬‬
‫حً ِشىٍت إٌّخح ‪ٚ‬اٌّسخ‪ٍٙ‬ه (بشِد‪١‬ب)‬ ‫‪‬‬
‫األلفبي ‪Mutex (Mutual Exclusion) Locks‬‬ ‫‪‬‬
‫حً ِشىٍت إٌّخح ‪ٚ‬اٌّسخ‪ٍٙ‬ه (ببسخخذاَ األلفبي)‬ ‫‪‬‬
‫اٌس‪ّ١‬بف‪ٛ‬س ‪Semaphore‬‬ ‫‪‬‬
‫حً ِشىٍت إٌّخح ‪ٚ‬اٌّسخ‪ٍٙ‬ه (ببسخخذاَ اٌس‪ّ١‬بف‪ٛ‬س )‬ ‫‪‬‬
‫ِشىٍت اٌمبسئبث‪-‬اٌىبحببث ‪Reading and writing problem‬‬ ‫‪‬‬
‫ِشىٍت اٌفالسفت اٌطبػّ‪Dining philosophers problem ٓ١‬‬ ‫‪‬‬
‫‪2‬‬
‫ِف‪ َٛٙ‬اٌخ‪ٛ‬اص‪Concurrency ٞ‬‬
‫•ٔمظذ ببٌخ‪ٛ‬اص‪ ٞ‬حٕف‪١‬ز أوثش ِٓ ػٍّ‪١‬ت ف‪ٚ ٟ‬لج ‪ٚ‬احذ‪.‬‬
‫•لذ حى‪ ْٛ‬اٌؼٍّ‪١‬بث اٌّخ‪ٛ‬اص‪٠‬ت ِسخمٍت ػٓ بؼؼ‪ٙ‬ب اٌبؼغ ( ‪)independent processes‬‬
‫•‪ ٚ‬لذ حى‪ِ ْٛ‬خؼب‪ٔٚ‬ت ِغ بؼؼ‪ٙ‬ب اٌبؼغ (‪)cooperative processes‬‬

‫اٌؼٍّ‪١‬ت اٌّسخمٍت ٘‪ ٟ‬اٌخ‪ ٟ‬ال حؤثش ‪ٚ‬ال حخأثش ببٌؼٍّ‪١‬بث اٌخ‪ ٟ‬حؼًّ ِؼ‪ٙ‬ب ف‪ٔ ٟ‬فس اٌ‪ٛ‬لج‪.‬‬
‫اٌؼٍّ‪١‬ت اٌّخؼب‪ٔٚ‬ت ٘‪ ٟ‬اٌؼٍّ‪١‬ت اٌخ‪ ٟ‬حؤثش ‪ ٚ‬حخأثش ببٌؼٍّ‪١‬بث األخش‪ ٜ‬اٌخ‪ ٟ‬حؼًّ ِؼ‪ٙ‬ب ببٌخ‪ٛ‬اص‪.ٞ‬‬

‫•ِثال لذ أل‪ َٛ‬بخشغ‪ِ ً١‬حشس إٌظ‪ٛ‬ص( ‪)WinWord‬ألوخب ػٍ‪ٚ ،ٗ١‬اسخّغ إٌ‪ِ ٝ‬بدة ط‪ٛ‬ح‪١‬ت ب‪ٛ‬اسطت‬
‫ِشغً اٌ‪ٛ‬سبئؾ ( ‪٠ٚ )media player‬ى‪ ْٛ‬اٌّخظفح ‪ٕ٠‬ضي ٍِفبث ِٓ االٔخشٔج‪٘ ،‬زٖ اٌؼٍّ‪١‬بث حٕفز‬
‫ببٌخ‪ٛ‬اص‪ ٞ‬ف‪ٚ ٟ‬لج ‪ٚ‬احذ ‪ٌٚ‬ىٕ‪ٙ‬ب ِسخمٍت ػٓ بؼؼ‪ٙ‬ب اٌبؼغ‪.‬‬

‫•اٌخ‪ٛ‬اص‪ ٞ‬لذ ‪٠‬طبك ػٍ‪ِ ٝ‬سخ‪ ٜٛ‬اٌؼٍّ‪١‬بث ) ‪) concurrent processes‬‬


‫أ‪ ٚ‬ػٍ‪ِ ٝ‬سخ‪ ٜٛ‬اٌخ‪ٛ١‬ؽ ( ‪)concurrent threads‬‬

‫‪3‬‬
‫االحظبي ب‪ ٓ١‬اٌؼٍّ‪١‬بث‬

‫‪4‬‬
‫االحظبي ب‪ ٓ١‬اٌؼٍّ‪١‬بث‬
‫•ٌّبرا ححخبج اٌؼٍّ‪١‬بث اٌّخ‪ٛ‬اص‪٠‬ت اٌخؼب‪ ْٚ‬ف‪ّ١‬ب ب‪ٕٙ١‬ب ؟‬
‫‪ .1‬ؽٍب ػٍّ‪١‬ت ٌخذِت ِٓ ػٍّ‪١‬ت أخش‪ :ٜ‬ف‪٘ ٟ‬زٖ اٌحبٌت ػٍ‪ ٝ‬اٌؼٍّ‪١‬ت اٌخ‪ ٟ‬ؽٍبج اٌخذِت أخظبس‬
‫اٌؼٍّ‪١‬ت اٌخ‪ ٟ‬ؽٍب ِٕ‪ٙ‬ب اٌخذِت حخ‪ ٝ‬حفشؽ ِٓ أدائ‪ٙ‬ب‪.‬‬
‫‪ .2‬ص‪٠‬بدة سشػت اٌخٕف‪١‬ز‪ٚ :‬رٌه بخمس‪ِّٙ ُ١‬ت ‪ٚ‬احذة وب‪١‬شة ػٍ‪ ٝ‬ػذة ػٍّ‪١‬بث ‪٠‬خُ حٕف‪١‬ز٘ب ببٌخ‪ٛ‬اص‪.ٞ‬‬
‫‪ .3‬لذ ‪٠‬ى‪ ِٓ ْٛ‬اٌّالئُ ٌٍؼٍّ‪١‬بث أْ حؼًّ ِغ بؼؼ‪ٙ‬ب الٔدبص اٌؼًّ‪ِ ،‬ثال ف‪ٔ ٟ‬ظبَ اٌ‪ٛ‬سبئؾ اٌّخؼذدة‬

‫‪5‬‬
‫حٕبفس اٌؼٍّ‪١‬بث ( ‪)process competition‬‬
‫لذ حى‪ ْٛ‬اٌؼٍّ‪١‬بث ِسخمٍت ٌىٕ‪ٙ‬ب حخظً ِغ بؼؼ‪ٙ‬ب السخخذاَ ِ‪ٛ‬اسد ِشخشوت‪.‬‬ ‫•‬
‫ِثال افخشع أْ ٌذ‪ٕ٠‬ب ػٍّ‪١‬خبْ‪ ،‬وً ػٍّ‪١‬ت حش‪٠‬ذ ؽببػت ٍِف ػٍ‪ ٝ‬اٌطببؼت (اٌّشخشوت)‪،‬‬ ‫•‬
‫البذ ٌ‪ّٙ‬ب ِٓ االحظبي ب‪ّٕٙ١‬ب ٌ‪١‬مشسا ِٓ ‪٠‬سخخذَ اٌطببؼت أ‪ٚ‬ال‪ٚ ،‬ػٍ‪ ٝ‬اٌؼٍّ‪١‬ت اٌثبٔ‪١‬ت‬
‫االٔخظبس حخ‪ ٝ‬حفشؽ األ‪ ِٓ ٌٝٚ‬اٌطببػت‪٘ .‬زا ‪٠‬سّ‪٘ ٝ‬زا حٕبفس اٌؼٍّ‪١‬بث ( ‪process‬‬
‫‪.)competition‬‬

‫لذ حى‪ٌٍ ْٛ‬ؼٍّ‪١‬بث اٌّخؼب‪ٔٚ‬ت ب‪١‬بٔبث ِشخشوت حسخط‪١‬غ اٌ‪ٛ‬ط‪ٛ‬ي إٌ‪ٙ١‬ب‪ .‬إرا ٌُ ‪٠‬ىٓ ٕ٘بٌه‬ ‫•‬
‫ححىُ ف‪ ٟ‬ؽش‪٠‬مت اٌ‪ٛ‬ط‪ٛ‬ي ٌ‪ٙ‬زٖ اٌب‪١‬بٔبث سخى‪ ْٛ‬إٌخ‪١‬دت ‪ٚ‬ط‪ٛ‬ي غ‪١‬ش ِٕظُ ٌ‪ٙ‬ب أ‪ ٚ‬حٕبصع‬
‫ح‪ٌٙٛ‬ب ‪ٚ‬ببٌخبٌ‪ٔ ٟ‬خبئح غ‪١‬ش طح‪١‬حت‪.‬‬
‫٘زا اٌ‪ٛ‬ط‪ٛ‬ي غ‪١‬ش إٌّظُ ٌٍب‪١‬بٔبث اٌّشخشوت ‪٠‬سّ‪ ٝ‬حبٌت اٌسببق ) ‪)race condition‬‬ ‫•‬
‫ح‪١‬ث حخسببك اٌؼٍّ‪١‬بث ف‪ ٟ‬حغ‪١١‬ش ل‪ّ١‬ت اٌب‪١‬بٔبث اٌّشخشوت‪.‬‬

‫‪6‬‬
) race condition ( ‫حبٌت اٌسببق‬

7
‫ِشىٍت اٌّمطغ اٌحشج ( ‪) critical section‬‬
‫إرا وبْ ٌذ‪ٕ٠‬ب ِخغ‪١‬ش ‪ِ ،x‬شخشن ب‪ ٓ١‬ػٍّ‪١‬خ‪ٚ ،ٓ١‬لبِج وً ػٍّ‪١‬ت بب‪٢‬ح‪:ٟ‬‬ ‫•‬
‫)‪(read x‬‬ ‫‪ .1‬لشاءة ل‪ّ١‬ت اٌّخغ‪١‬ش ‪x‬‬
‫‪ .2‬ص‪٠‬بدة ل‪ّ١‬ت اٌّخغ‪١‬ش ب‪ٛ‬احذ )‪)x=x+1‬‬
‫‪ .3‬حفع ل‪ّ١‬ت اٌّخغ‪١‬ش اٌدذ‪٠‬ذة )‪)write x‬‬
‫اٌّشىٍت سخظ‪ٙ‬ش ػٕذِب حم‪ َٛ‬أحذ اٌؼٍّ‪١‬بث بمشاءة ل‪ّ١‬ت اٌّخغ‪١‬ش‪ ،‬ثُ حم‪ َٛ‬اٌؼٍّ‪١‬ت اٌثبٔ‪١‬ت بمشاءة‬ ‫•‬
‫ل‪ّ١‬ت اٌّخغ‪١‬ش لبً أْ حم‪ َٛ‬اٌؼٍّ‪١‬ت األ‪ ٌٝٚ‬بحفع اٌم‪ّ١‬ت اٌدذ‪٠‬ذة ف‪ ٟ‬اٌّخغ‪١‬ش‪.‬‬
‫سخى‪ ْٛ‬إٌخ‪١‬دت إٌ‪ٙ‬بئ‪١‬ت بؼذ حٕف‪١‬ز اٌؼٍّ‪١‬خبْ أْ اٌّخغ‪١‬ش س‪١‬ض‪٠‬ذ ب‪ٛ‬احذ بذال ِٓ ‪. 2‬‬ ‫•‬
‫اٌحً ٘‪ ٛ‬أْ ّٕٔغ أ‪ ٞ‬ػٍّ‪١‬ت أخش‪ ِٓ ٜ‬اٌ‪ٛ‬ط‪ٛ‬ي ٌٍّخغ‪١‬ش ‪ x‬إرا وبٔج ٕ٘بٌه ػٍّ‪١‬ت حسخخذَ ٘زا‬ ‫•‬
‫اٌّخغ‪١‬ش‪.‬‬
‫إٌّطمت اٌخ‪ ٟ‬حخؼبًِ ِغ اٌّخغ‪١‬ش اٌّشخشن ف‪ ٟ‬اٌؼٍّ‪١‬ت ٔسّ‪ٙ١‬ب اٌّمطغ اٌحشج ( ‪critical‬‬ ‫•‬
‫‪) section‬‬
‫‪ٌٚ‬حً ِشىٍت حبٌت اٌسببق ‪٠‬دب أْ ٔخأوذ ِٓ أْ ٕ٘بٌه ػٍّ‪١‬ت ‪ٚ‬احذة حٕفز داخً إٌّطمت‬ ‫•‬
‫اٌحشخت‪ٚ .‬ال ‪٠‬سّح ٌٍؼٍّ‪١‬ت اٌثبٔ‪١‬ت ببٌذخ‪ٛ‬ي إٌ‪ ٝ‬إٌّطمت اٌحشخت إال بؼذ خش‪ٚ‬ج اٌؼٍّ‪١‬ت األ‪ٌٝٚ‬‬
‫ِٕ‪ٙ‬ب‪.‬‬
‫‪8‬‬
9
‫سٕم‪ َٛ‬بذساست ؽش‪٠‬مخ‪ ٟ‬األلفبي ‪ٚ‬اٌس‪ّ١‬بف‪ٛ‬ساث ببٌخفظ‪ً١‬‬
‫‪ ٚ‬سٕسخخذِ‪ٌ ُٙ‬حً ِشبوً اٌخضآِ اٌخمٍ‪١‬ذ‪٠‬ت اٌّش‪ٛٙ‬سة‬ ‫‪10‬‬
‫ِشىٍت إٌّخح ‪ٚ‬اٌّسخ‪ٍٙ‬ه (‪)producer-consumer‬‬
‫• ِشىٍت إٌّخح ‪ٚ‬اٌّسخ‪ٍٙ‬ه أح‪١‬بٔب حسّ‪ِ ٝ‬شىٍت اٌخبصْ اٌّحذ‪ٚ‬د ( ‪.)bounded-buffer‬‬
‫• ‪٠‬ى‪ٌ ْٛ‬ذ‪ٕ٠‬ب ػٍّ‪١‬خبْ حسخخذِبْ خبصْ ِشخشن‪ ،‬اٌؼٍّ‪١‬ت األ‪ ٌٝٚ‬حؼغ بٗ ب‪١‬بٔبث ب‪ّٕ١‬ب حأخز‬
‫اٌؼٍّ‪١‬ت األخش‪ ٜ‬اٌب‪١‬بٔبث ِٕٗ‪.‬‬
‫• ػٍ‪ ٝ‬اٌؼٍّ‪١‬خ‪ ٓ١‬اٌخٕس‪١‬ك ف‪ّ١‬ب ب‪ّٕٙ١‬ب بح‪١‬ث ال ححب‪ٚ‬ي اٌؼٍّ‪١‬ت األ‪ٚ ٌٝٚ‬ػغ ب‪١‬بٔبث ف‪ ٟ‬اٌخبصْ‬
‫إرا وبْ ِّخٍئب‪ٚ ،‬ال ححب‪ٚ‬ي اٌؼٍّ‪١‬ت اٌثبٔ‪١‬ت أخز ب‪١‬بٔبث ِٓ اٌخبصْ إرا وبْ فبسغب‪.‬‬

‫‪11‬‬
‫حً ِشىٍت إٌّخح ‪ٚ‬اٌّسخ‪ٍٙ‬ه (بشِد‪١‬ب)‬
‫• ٌٕؼشف بذا‪٠‬ت اٌّؼط‪١‬بث اٌّشخشوت ٌٍّشىٍت‬
‫• ٌذ‪ٕ٠‬ب ِحضْ سؼخٗ ‪ 7‬ػٕبطش ٔؼغ ف‪ٛٔ ِٓ items ٗ١‬ع ‪data‬‬

‫‪12‬‬
‫حً ِشىٍت إٌّخح ‪ٚ‬اٌّسخ‪ٍٙ‬ه (بشِد‪١‬ب)‬
‫• ‪ّ٠‬ىٓ حً ٘زٖ اٌّشىٍت بئخببس ػٍّ‪١‬ت إٌّخح ػٍ‪ ٝ‬اٌخ‪ٛ‬لف ػٓ إحؼبس اٌب‪١‬بٔبث ٌٍخبصْ إرا وبْ‬
‫ِّخٍئب ( ‪( ) sleep‬أ‪ ٞ‬حٍمت ‪ While‬حذ‪ٚ‬س ‪ٚ‬ال حفؼً أ‪ ٞ‬ش‪ٟ‬ء) ‪ٚ‬ػٕذِب ‪٠‬فشؽ ِىبْ ف‪ٟ‬‬
‫اٌخبصْ حم‪ َٛ‬ػٍّ‪١‬ت اٌّسخ‪ٍٙ‬ه ِٓ إ‪٠‬مبظ إٌّخح ٌ‪١‬بذأ ف‪ ٟ‬حؼبئت اٌخبصْ (أ‪ ٞ‬حٕىسش حٍمت‬
‫‪٠ ٚ While‬بذأ إٌّخح ببإلٔخبج )‪.‬‬
‫• بٕفس اٌطش‪٠‬مت حخ‪ٛ‬لف ػٍّ‪١‬ت اٌّسخ‪ٍٙ‬ه ‪ sleep‬إرا وبْ اٌخبصْ فبسغب‪ٚ ،‬ػٕذِب ‪٠‬حؼش إٌّخح‬
‫ب‪١‬بٔبث ٌٍخبصْ‪٠ ،‬م‪ َٛ‬بئ‪٠‬مبظ‪ٙ‬ب ٌخبذأ ف‪ ٟ‬أخز اٌب‪١‬بٔبث ِٓ اٌخبصْ‪.‬‬

‫إخشائ‪١‬ت إٌّخح‬ ‫إخشائ‪١‬ت اٌّسخ‪ٍٙ‬ه‬

‫‪13‬‬
‫حً ِشىٍت إٌّخح ‪ٚ‬اٌّسخ‪ٍٙ‬ه (بشِد‪١‬ب)‬
‫• ‪ّ٠‬ثً ‪ counter‬ػذد اٌؼٕبطش اٌّ‪ٛ‬خ‪ٛ‬دة ببٌخبصْ‪ ٚ ،‬اٌّخغ‪١‬ش ‪ّ٠ buffer‬ثً اٌخبصْ‪.‬‬
‫• سخخخبش إخشائ‪١‬ت إٌّخح اٌخبصْ‪ِّ ٛ٘ ً٘ ،‬خٍئ أَ ال ؟ ‪ٚ‬رٌه ببألِش‪:‬‬
‫;)‪while (counter == BUFFER_SIZE‬‬
‫• إرا وبٔج اٌّسب‪ٚ‬اة طح‪١‬حت س‪١‬خ‪ٛ‬لف إٌّخح ػٓ حؼبئت اٌخبصْ ‪٠ٚ‬ز٘ب ٌ‪ٕ١‬بَ ( حٍمت ‪While‬ال‬
‫ٔ‪ٙ‬بئ‪١‬ت ‪ٚ‬ال حفؼً ش‪ٟ‬ء) ‪٠ ٌٓٚ‬شخغ ٌؼٍّٗ ِب ٌُ ‪ٛ٠‬لظٗ اٌّسخ‪ٍٙ‬ه‪.‬‬
‫• أِب إرا وبٔج ػٍّ‪١‬ت اٌّسب‪ٚ‬اة غ‪١‬ش طح‪١‬حت‪ ,‬أ‪ ٞ‬أْ اٌخبصْ غ‪١‬ش ِّخٍئ ‪ ,‬فس‪ٛ١‬اطً إٌّخح ف‪ٟ‬‬
‫إحؼبس ػٕبطش ٌٍخبصْ ببألِش‪:‬‬
‫;‪Buffer[in] = nextProduced‬‬
‫• ثُ ‪٠‬ض‪٠‬ذ اٌّخغ‪١‬ش ‪ in‬بّمذاس ‪ٚ‬احذ ٌ‪١‬حذد ِىبْ إٌّخح اٌمبدَ‬
‫;‪in = ( in + 1 ) %BUFFER_SIZE‬‬
‫• ثُ ‪٠‬ض‪٠‬ذ ‪ counter‬ب‪ٛ‬احذ ٌ‪١‬ذي ػٍ‪ ٝ‬ص‪٠‬بدة ػذد اٌؼٕبطش اٌحبٌ‪١‬ت ف‪ ٟ‬اٌّخضْ‪:‬‬
‫; ‪counter ++‬‬
‫حٕف‪١‬ز األِش ‪٠ Counter ++‬ؼخبش بّثببت ػٍّ‪١‬ت إ‪٠‬مبظ ٌٍّسخ‪ٍٙ‬ه ف‪ ٟ‬حبي وبْ ف‪ ٟ‬حبٌت ‪, sleep‬‬
‫ألٔ‪ٙ‬ب حىسش حٍمت ‪ While‬اٌّ‪ٛ‬خ‪ٛ‬دة ٌذ‪ ٜ‬اٌّسخ‪ٍٙ‬ه ‪.‬‬
‫‪14‬‬
‫حً ِشىٍت إٌّخح ‪ٚ‬اٌّسخ‪ٍٙ‬ه (بشِد‪١‬ب)‬
‫• أِب ببٌٕسبت إلخشائ‪١‬ت اٌّسخ‪ٍٙ‬ه سخخخبش اٌخبصْ‪ ٛ٘ ً٘ ،‬فبسؽ أَ ال ؟ ‪ٚ‬رٌه ببألِش‪:‬‬
‫;)‪while (counter == 0‬‬
‫• إرا وبٔج اٌّسب‪ٚ‬اة طح‪١‬حت س‪١‬خ‪ٛ‬لف ػٓ أخز اٌب‪١‬بٔبث ِٓ اٌخبصْ ‪٠ٚ‬ز٘ب ٌ‪ٕ١‬بَ ‪٠ ٌٓٚ‬شخغ‬
‫ٌؼٍّٗ ِب ٌُ ‪ٛ٠‬لظٗ إٌّخح (ػٕذِب ‪٠‬حؼش ب‪١‬بٔبث ٌٍخبصْ)‪.‬‬
‫• أِب إرا وبٔج ػٍّ‪١‬ت اٌّسب‪ٚ‬اة غ‪١‬ش طح‪١‬حت‪ ,‬أ‪ ٞ‬أْ اٌخبصْ غ‪١‬ش فبسؽ‪ ,‬فس‪ٛ١‬اطً اٌّسخ‪ٍٙ‬ه‬
‫ػٍّٗ بأخز ػٕظش وً ِشة ِٓ اٌخبصْ ببألِش‪:‬‬
‫; ]‪nextConcumed = Buffer[out‬‬
‫• ثُ ‪٠‬ض‪٠‬ذ اٌّخغ‪١‬ش ‪ out‬بّمذاس ‪ٚ‬احذ ٌ‪١‬حذد ِىبْ اٌسحب اٌمبدَ‬
‫;‪out = ( out + 1 ) %BUFFER_SIZE‬‬
‫• ثُ ‪ٕ٠‬مض ‪ counter‬ب‪ٛ‬احذ ٌ‪١‬ذي ػٍ‪ٔ ٝ‬مظبْ ػذد اٌؼٕبطش اٌحبٌ‪١‬ت ف‪ ٟ‬اٌّخضْ‪:‬‬
‫; ‪counter --‬‬
‫حٕف‪١‬ز األِش ‪٠ Counter --‬ؼخبش بّثببت ػٍّ‪١‬ت إ‪٠‬مبظ ٌٍّٕخح ف‪ ٟ‬حبي وبْ ف‪ ٟ‬حبٌت ‪ , sleep‬ألٔ‪ٙ‬ب‬
‫حىسش حٍمت ‪ While‬اٌّ‪ٛ‬خ‪ٛ‬دة ٌذ‪ ٜ‬إٌّخح‪.‬‬

‫‪15‬‬
‫حً ِشىٍت إٌّخح ‪ٚ‬اٌّسخ‪ٍٙ‬ه (بشِد‪١‬ب)‬
‫• ٘زا اٌحً اٌبشِد‪ٌّ ٟ‬شىٍت إٌّخح ِسخ‪ٍٙ‬ه ‪٠‬ؼبٔ‪ِ ِٓ ٟ‬شىٍت اٌّمطغ اٌحشج ‪ ,‬ألْ وال ِٓ‬
‫إخشائ‪١‬خ‪ ٟ‬إٌّخح ‪ٚ‬اٌّسخ‪ٍٙ‬ه حشخشوبْ ببٌّخغ‪١‬ش ‪. counter‬‬
‫• ِٓ اٌّّىٓ حظ‪ٛ‬ي حبٌت اٌسببق ) ‪ ٚ )race condition‬ببٌخبٌ‪ ٟ‬اٌ‪ٛ‬ط‪ٛ‬ي إٌ‪ٔ ٝ‬خبئح خبؽئت‬

‫‪16‬‬
Mutex (Mutual Exclusion) Locks ‫األلفبي‬

17
Mutex (Mutual Exclusion) Locks ‫األلفبي‬
true ٟ٘ available ‫ي‬ٛ‫ت ٌٍّخح‬١‫ّت االبخذائ‬١‫• اٌم‬
‫ز‬١‫اٌخٕف‬ٚ ‫ اٌّمطغ اٌحشج‬ٌٝ‫ي إ‬ٛ‫ّىٕٕب اٌذخ‬٠ ٗٔ‫ أ‬ٟٕ‫ؼ‬٠ available=true ‫• ػٕذِب‬
‫ز‬١‫ اٌخٕف‬ٚ‫ي أ‬ٛ‫ع اٌذخ‬ِّٕٛٚ ً‫خذ لف‬ٛ٠ ٗٔ‫ أ‬ٟٕ‫ؼ‬٠ available=false ‫• ػٕذِب‬

18
‫حً ِشىٍت إٌّخح ‪ٚ‬اٌّسخ‪ٍٙ‬ه (ببسخخذاَ األلفبي)‬
‫• اٌم‪ّ١‬ت االبخذائ‪١‬ت ٌٍّخح‪ٛ‬ي ‪true ٟ٘ available‬‬
‫• ػٕذِب ‪٠ available=true‬ؼٕ‪ ٟ‬أٔٗ ‪ّ٠‬ىٕٕب اٌذخ‪ٛ‬ي إٌ‪ ٝ‬اٌّمطغ اٌحشج ‪ٚ‬اٌخٕف‪١‬ز‬
‫• ػٕذِب ‪٠ available=false‬ؼٕ‪ ٟ‬أٔٗ ‪ٛ٠‬خذ لفً ‪ِّٕٛٚ‬ع اٌذخ‪ٛ‬ي أ‪ ٚ‬اٌخٕف‪١‬ز‬

‫إخشائ‪١‬ت إٌّخح‬ ‫إخشائ‪١‬ت اٌّسخ‪ٍٙ‬ه‬

‫‪19‬‬
‫اٌس‪ّ١‬بف‪ٛ‬س ‪Semaphore‬‬
‫• اٌس‪ّ١‬بف‪ٛ‬س ٘‪ ٛ‬ػالِت وبٔج حسخخذَ لذ‪ّ٠‬ب ٌخٕظ‪ِ ُ١‬ش‪ٚ‬س اٌمبؽشاث‪ ،‬ح‪١‬ث س‪١‬ى‪ٌٍ ْٛ‬س‪ّ١‬بف‪ٛ‬س‬
‫حبٌخ‪ ،ٓ١‬إِب ححج أ‪ٚ ٚ‬ف‪ٛ‬ق‪ ،‬ػٕذِب حظً لبؽشة ‪ٚ‬حش‪٠‬ذ اٌذخ‪ٛ‬ي ٌٍّحطت س‪ٕ١‬ظش اٌسبئك‬
‫ٌٍس‪ّ١‬بف‪ٛ‬س فئرا وبٔج ‪ٚ‬ػؼ‪١‬خٗ ححج ف‪ٙ‬زا ‪٠‬ؼٕ‪ ٟ‬أْ اٌطش‪٠‬ك سبٌىت (حشبٗ إشبسة اٌّش‪ٚ‬س‬
‫اٌخؼشاء)‪ٚ ،‬ألْ خؾ اٌسىت حذ‪٠‬ذ ال ‪٠‬حخًّ حالل‪ ٟ‬لبؽشح‪ ،ٓ١‬فس‪١‬شفغ اٌس‪ّ١‬بف‪ٛ‬س إٌ‪ ٝ‬أػٍ‪ ٝ‬بؼذ‬
‫دخ‪ٛ‬ي اٌمبؽشة بح‪١‬ث ال ‪٠‬سّح ٌمبؽشة أخش‪ ٜ‬أْ حذخً (اٌخؾ ِشغ‪ٛ‬ي) ‪٠ٚ‬شبٗ ٘زا إشبسة‬
‫اٌّش‪ٚ‬س اٌحّشاء‪.‬‬

‫• بٕفس اٌّف‪ َٛٙ‬سٕسخخذَ ِخغ‪١‬ش ‪ّ٠‬ثً اٌس‪ّ١‬بف‪ٛ‬س (ػذد طح‪١‬ح ‪٠‬حخًّ ل‪ّ١‬خ‪ ،)ٓ١‬ح‪١‬ث حّثً‬
‫ل‪ّ١‬ت ػالِت ححج ‪ٚ‬ل‪ّ١‬ت أخش‪ ٜ‬ػالِت ف‪ٛ‬ق‪ .‬ثُ إرا بذأث ػٍّ‪١‬ت اسخخذاَ ب‪١‬بٔبث ِشخشوت‬
‫سخؼغ اٌم‪ّ١‬ت اٌخ‪ ٟ‬حّثً ػالِت ف‪ٛ‬ق داخً ِخغ‪١‬ش اٌس‪ّ١‬بف‪ٛ‬س ‪ٚ ،‬إرا أسادث ػٍّ‪١‬ت أخش‪ٜ‬‬
‫اسخخذاَ اٌب‪١‬بٔبث اٌّشخشوت سخخخبش اٌس‪ّ١‬بف‪ٛ‬س ‪ٚ‬بّب أْ ػالِخٗ ف‪ٛ‬ق ف‪ٙ‬زا ‪٠‬ؼٕ‪ ٟ‬أٔٗ ال ‪٠‬سّح‬
‫ٌ‪ٙ‬ب ببسخخذاَ اٌب‪١‬بٔبث اٌّشخشوت ا‪.ْ٢‬‬

‫• • ‪ّ٠‬ىٓ اسخخذاَ اٌس‪ّ١‬بف‪ٛ‬س ٌحً ِشىٍت اٌّمطغ اٌحشج ‪ِٚ‬شىٍت إٌّخح – اٌّسخ‪ٍٙ‬ه ‪ٚ‬غ‪١‬ش٘ب ‪.‬‬

‫‪20‬‬
‫اٌس‪ّ١‬بف‪ٛ‬س ‪Semaphore‬‬

‫• حؼش‪٠‬ف اٌخؼٍ‪ّ١‬ت )(‪ wail‬أخظش‬

‫• حؼش‪٠‬ف اٌخؼٍ‪ّ١‬ت )(‪ signal‬أسسً‬

‫‪21‬‬
Semaphore Usage ‫س‬ٛ‫ّبف‬١‫اسخخذاَ اٌس‬

22
‫ححم‪١‬ك اٌمفً ‪ Mutex‬ببسخخذاَ اٌس‪ّ١‬بف‪ٛ‬س‬

‫‪23‬‬
‫ححم‪١‬ك اٌخٕب‪ Notification ٗ١‬ببسخخذاَ اٌس‪ّ١‬بف‪ٛ‬س‬

‫‪24‬‬
‫حً ِشىٍت إٌّخح ‪ٚ‬اٌّسخ‪ٍٙ‬ه (اٌس‪ّ١‬بف‪ٛ‬س )‬
‫•‬

‫‪25‬‬
‫حً ِشىٍت إٌّخح ‪ٚ‬اٌّسخ‪ٍٙ‬ه (اٌس‪ّ١‬بف‪ٛ‬س )‬
‫•‬

‫‪26‬‬
‫حً ِشىٍت إٌّخح ‪ٚ‬اٌّسخ‪ٍٙ‬ه (اٌس‪ّ١‬بف‪ٛ‬س )‬

‫‪27‬‬
Reading and writing problem ‫اٌىبحببث‬-‫ِشىٍت اٌمبسئبث‬

28
‫حً ِشىٍت اٌمبسئبث‪-‬اٌىبحببث (ببسخخذاَ اٌس‪ّ١‬بف‪ٛ‬س)‬

‫• اٌّؼط‪١‬بث اٌّشخشوت ٌٍّشىٍت ‪:‬‬

‫‪29‬‬
‫حً ِشىٍت اٌمبسئبث‪-‬اٌىبحببث (ببسخخذاَ اٌس‪ّ١‬بف‪ٛ‬س)‬

‫‪30‬‬
‫ِشىٍت اٌفالسفت اٌطبػّ‪Dining philosophers problem ٓ١‬‬
‫• ٕ٘بٌه ‪ 5‬فالسفت ‪٠‬دٍس‪ ْٛ‬ػٍ‪ ٝ‬ؽب‪ٌٚ‬ت ِسخذ‪٠‬شة ‪ٚ‬ػٍ‪ ٝ‬وً ف‪ٍ١‬س‪ٛ‬ف أْ ‪٠‬م‪ َٛ‬بأحذ أِش‪،ٓ٠‬‬
‫إِب أْ ‪٠‬أوً أ‪٠ ٚ‬فىش‪ .‬فئرا أوً ال ‪٠‬فىش‪ٚ ،‬إرا فىش ال ‪٠‬أوً‪.‬‬
‫• ‪ٕ٘ٚ‬بٌه خّست ش‪ٛ‬ن‪ ،‬ش‪ٛ‬وت ب‪ ٓ١‬وً ف‪ٍ١‬س‪ٛ‬ف‪ ،ٓ١‬بح‪١‬ث ‪٠‬ى‪ ْٛ‬ػٍ‪ ٓ١ّ٠ ٝ‬وً ف‪ٍ١‬س‪ٛ‬ف ش‪ٛ‬وت‬
‫‪ٚ‬ػٍ‪٠ ٝ‬سبسٖ ش‪ٛ‬وت‪٠ٚ .‬حخبج وً ف‪ٍ١‬س‪ٛ‬ف أْ ‪٠‬سخخذَ اٌش‪ٛ‬وخ‪ٌ ٓ١‬ألوً‪ٚ .‬البذ ِٓ أْ‬
‫‪٠‬سخخذَ اٌش‪ٛ‬وخ‪ ٓ١‬اٌٍخ‪ ٓ١‬ػٍ‪٠ٚ ٕٗ١ّ٠ ٝ‬سبسٖ ِببششة‪.‬‬

‫‪31‬‬
‫حً ِشىٍت اٌفالسفت اٌطبػّ‪ٓ١‬‬
‫اٌحً األ‪ٚ‬ي ‪ِ ٚ‬شىٍت االخخٕبق‬ ‫•‬
‫إرا أخز وً اٌفالسفت ش‪ٛ‬وبح‪ ُٙ‬اٌ‪١‬سش‪ ٜ‬ػٕذ٘ب ٌٓ ‪٠‬سخط‪١‬غ أ‪ ُِٕٙ ٞ‬اٌحظ‪ٛ‬ي ػٍ‪ ٝ‬اٌش‪ٛ‬وت‬ ‫•‬
‫اٌ‪ٚ ،ّٕٝ١‬س‪١‬ظً وً ف‪ٍ١‬س‪ٛ‬ف ِٕخظشا اٌش‪ٛ‬وت اٌ‪ ّٕٝ١‬حخ‪ ٝ‬حفشؽ‪ ،‬أ‪ ٞ‬أْ اٌف‪ٍ١‬س‪ٛ‬ف ف ‪،1‬‬
‫س‪١‬ى‪ ْٛ‬ف‪ ٟ‬أخظبس اٌف‪ٍ١‬س‪ٛ‬ف ف ‪١ٌ 2‬خشن ش‪ٛ‬وخٗ‪ٚ ،‬اٌف‪ٍ١‬س‪ٛ‬ف ف ‪ 2‬س‪ٕ١‬خظش اٌف‪ٍ١‬س‪ٛ‬ف ف‬
‫‪١ٌ 3‬خشن ش‪ٛ‬وخٗ‪٘ٚ ،‬ىزا أخظبس دائش‪ِّ ، ٞ‬ب ‪٠‬سبب إخخٕبق (‪.)deadlock‬‬
‫اٌحً اٌثبٔ‪ِ ٚ ٟ‬شىٍت اٌحشِبْ‬ ‫•‬
‫‪ّ٠‬ىٓ حً اٌّشىٍت بدؼً اٌف‪ٍ١‬س‪ٛ‬ف ‪ٍ٠‬خمؾ ش‪ٛ‬وخٗ اٌ‪١‬سش‪ ٜ‬ثُ ‪٠‬خخبش ً٘ اٌش‪ٛ‬وت اٌ‪ّٕٝ١‬‬ ‫•‬
‫ِخبحت‪ ،‬فئْ ٌُ حىٓ وزٌه ‪٠‬ؼغ اٌف‪ٍ١‬س‪ٛ‬ف ش‪ٛ‬وخٗ اٌ‪١‬سش‪ٕ٠ٚ ٜ‬خظش فخشة صِٕ‪١‬ت ِحذدة ثُ ‪٠‬ؼ‪١‬ذ‬
‫اٌىشة ِشة أخش‪.ٜ‬‬
‫٘زٖ اٌطش‪٠‬مت لذ حفشً إرا لبَ وً اٌفالسفت بئٌخمبؽ ش‪ٛ‬وبح‪ ُٙ‬اٌ‪١‬سش‪ ٜ‬ف‪ٚ ٟ‬لج ‪ٚ‬احذ‪ ،‬فٍٓ‬ ‫•‬
‫‪٠‬دذ‪ٚ‬ا ش‪ٛ‬وبح‪ ُٙ‬اٌ‪ ،ّٕٝ١‬فس‪١‬ؼؼ‪ٛ‬ا ش‪ٛ‬وبح‪ ُٙ‬اٌ‪١‬سش‪ٕ٠ٚ ٜ‬خظش‪ٚ‬ا فخشة صِٕ‪١‬ت ِحذدة ِخسب‪٠ٚ‬ت‬
‫ٌىً اٌفالسفت‪٘ٚ ،‬ىزا ‪٠‬ظٍ‪ٛ‬ا ‪٠‬ىشس‪ ْٚ‬ف‪٘ ٟ‬زٖ اٌّحب‪ٌٚ‬ت إٌ‪ِ ٝ‬ب ال ٔ‪ٙ‬ب‪٠‬ت ‪ٚ‬حظً اٌّشىٍت لبئّت‪.‬‬
‫٘زا ‪٠‬حشَ خّ‪١‬غ اٌفالسفت ِٓ األوً ‪ٚ‬ححظً ِدبػت أ‪ِ ٚ‬ب ‪٠‬سّ‪ ٝ‬اٌحشِبْ ( ‪)starvation‬‬ ‫•‬

‫‪32‬‬
‫حً ِشىٍت اٌفالسفت اٌطبػّ‪ٓ١‬‬
‫• اٌحً اٌثبٌث ‪ ٚ‬احخّبي اٌفشً‬
‫• إرا ‪ّ٠‬ىٓ حً ٘زٖ اٌّشىٍت بدؼً فخشاث أخظبس اٌفالسفت ػش‪ٛ‬ائ‪١‬ت ‪ٚ‬ببٌخبٌ‪ ٟ‬إحخّبي أٔ‪ٙ‬ب‬
‫حى‪ِ ْٛ‬خسب‪٠ٚ‬ت لذ ‪٠‬ى‪ ْٛ‬ػؼ‪١‬فب خذا‪٘ٚ ،‬زا ِب ‪٠‬طبك ببٌفؼً ف‪ ٝ‬وث‪١‬ش ِٓ األٔظّت‪ٌ ،‬ىٓ‬
‫أح‪١‬بٔب ٔى‪ ْٛ‬بحبخت إٌ‪ ٝ‬حً ال ‪٠‬حخًّ اٌفشً بسبب حطببك اٌفخشاث اٌؼش‪ٛ‬ائ‪١‬ت‪ .‬رٌه ألْ‬
‫ٕ٘بٌه ِٓ االٔظّت ِب حذ‪٠‬ش أخ‪ٙ‬ضة حسبست ال حمبً إحخّبي أ‪ ٞ‬فشً ِثً أٔظّت ِشالبت‬
‫اٌّفبػً إٌ‪٠ٚٛ‬ت‪.‬‬

‫• اٌحً اٌشابغ ببسخخذاَ اٌس‪ّ١‬بف‪ٛ‬س‬


‫• ٕ٘ب ٔم‪ َٛ‬ببسخخذاَ س‪ّ١‬بف‪ٛ‬س ثٕبئ‪ ،semaphore ( ) ٟ‬ح‪١‬ث ‪٠‬م‪ َٛ‬اٌف‪ٍ١‬س‪ٛ‬ف لبً اٌحظ‪ٛ‬ي‬
‫ػٍ‪ ٝ‬ش‪ٛ‬وت بغٍك اٌس‪ّ١‬بف‪ٛ‬س )ححج(‪ ،‬ثُ بؼذ إػبدة اٌش‪ٛ‬وت ‪٠‬فخح اٌس‪ّ١‬بف‪ٛ‬س )ف‪ٛ‬ق(‪٘ .‬زٖ‬
‫اٌطش‪٠‬مت حّىٓ ف‪ٍ١‬س‪ٛ‬ف ‪ٚ‬احذ فمؾ أْ ‪٠‬أوً ف‪ ٟ‬أ‪ٌ ٞ‬حظت صِٕ‪١‬ت ِؼ‪ٕ١‬ت‪ٌٚ ،‬ىٓ بّب أْ ٕ٘بٌه‬
‫خّس ش‪ٛ‬ن فّٓ اٌّفخشع أْ ‪٠‬ى‪ٕ٘ ْٛ‬بٌه ف‪ٍ١‬س‪ٛ‬ف‪ ٓ١‬لبدس‪ ٓ٠‬ػٍ‪ ٝ‬األوً ف‪ ٟ‬اٌٍحظت‬
‫اٌ‪ٛ‬احذة‪.‬‬

‫‪33‬‬
‫حً ِشىٍت اٌفالسفت اٌطبػّ‪ٓ١‬‬

‫‪34‬‬

You might also like