الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سوال في الينكس

مغلق
بدأه heba2009 في 3 سبتمبر 2008 · 9 رد · 1,605 مشاهدة · في نظام تشغيل Unix & Linux
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بليزا ارجو المساعده

انشاء برنامج بلغة C القياسية, يقوم بما يلي:

1. إنشاء إجرائيتين.

2. كتابة التابع الخاص بإجراء wait للسيمافور.

3. كتابة التابع الخاص بإجراء signal للسيمافور.

4. كتابة الكود اللازم لمنع دخول كلا الإجرائيتين بالمقطع الحرج, ثم قم بحذف السيمافور بعد الانتهاء.

5.أنشاء ملف makefile الخاص بالبرنامج.

بليزا ارجو المساعده ان كان

linux programing headache

الحياة اصعب مما تبدو عليه احيانا

#2

ما علاقة السؤال باللينوكس ؟

بالنسبة لسؤالك له علاقة ب system programming عموما.

ولكن يا ريت لو توضح أكثر

بالنسبة لموضوع makefile أمره ، سهل، المهم الآن أن توضح السؤال ، ويا ريت تكتب المصطلحات بالإنجليزي.

System Engineer

Red Hat Certified Engineer

Red Hat Certificate Number

805010381752078

#3

انا اسفه كنت لازم اذكر انو الموضوع له علاقة

system programming

انشاء برنامج بلغة C القياسية, يقوم بما يلي:

1. إنشاء إجرائيتين.

create tow Process

2. كتابة التابع الخاص بإجراء wait للسيمافور.

wait هي التي تقوم بانقاص قيمة السيمافور

3. كتابة التابع الخاص بإجراء signal للسيمافور.

signal هي التي تقوم بزيادة قيمة السيما فور

4. كتابة الكود اللازم لمنع دخول كلا الإجرائيتين بالمقطع الحرج, ثم قم بحذف السيمافور بعد الانتهاء.

كتابة كود برمجي لمنع تواجد اكثر من اجرايئة داخل critical section

5.أنشاء ملف makefile الخاص بالبرنامج.

اجرائية= process

تم تعديل هذه المشاركة بواسطة heba2009 في 4 سبتمبر 2008 في 02:24

linux programing headache

الحياة اصعب مما تبدو عليه احيانا

#4

من الواضح من سؤالك انك تريد مثال على استخدام ال semaphore فشاهد هذا المثال ربما يفيدك

http://en.wikipedia.org/wiki/Sleeping_barber_problem

لاحظ انه يستخدم الدالة P بدلا من الدالة wait او بدلا من الدالة down

ويستخدم الدالة V بدلا من الدالة signal وبدلا من الدالة up

والله الموفق

تم تعديل هذه المشاركة بواسطة eramax في 4 سبتمبر 2008 في 01:25

amdvsintel22.jpg

--i use AMD--

لا اله الا الله محمد رسول الله

أستعن بالله و لا تعجز

تابعنى على تويتر

***

#5
eramax كتب:
من الواضح من سؤالك انك تريد مثال على استخدام ال semaphore فشاهد هذا المثال ربما يفيدك

http://en.wikipedia.org/wiki/Sleeping_barber_problem

لاحظ انه يستخدم الدالة P بدلا من الدالة wait او بدلا من الدالة down

ويستخدم الدالة V بدلا من الدالة signal وبدلا من الدالة up

والله الموفق

شكرا كتير على للينك

بس مالقيت يلي ابيه

ماعرفش وش اقول لكم خجلانة كتير منكم

ممكن تساعدوني في الطلبات عشان كملهم

ماعرفش اذا لسع في مجال تساعدوني

linux programing headache

الحياة اصعب مما تبدو عليه احيانا

#6

يا اختى الفاضلة هل تريدين مثال بسيط على ال semaphore اذا كان ذلك فقولى ونحن تحت امرك

والله الموفق

amdvsintel22.jpg

--i use AMD--

لا اله الا الله محمد رسول الله

أستعن بالله و لا تعجز

تابعنى على تويتر

***

#7

1.Create tow process

2.write private function with process wait (P in other reference)

3.write private function with process signal (V in other reference)

4.write a private code to prevent tow process entry critical section

5. Delete semaphore

6. create make file to this program

لا أريد امثلة بل إذا ممكن مساعدة مباشرة بكتابة البرنامج أو شرح واضح و شكرا

تم تعديل هذه المشاركة بواسطة heba2009 في 5 سبتمبر 2008 في 02:13

linux programing headache

الحياة اصعب مما تبدو عليه احيانا

#8

السلام عليكم

بالرغم من انه يمنع حل الاختبارات فى المنتدى الا انه حللا لهذه المسألة

  1.  
  2. #include <unistd.h>
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <semaphore.h>
  6. #include <pthread.h>
  7.  
  8. typedef int semaphore ;
  9. #define TRUE 1
  10. semaphore mutex=1;
  11. int c=0;
  12.  
  13. pthread_t thread1,thread2;
  14.  
  15. void x()
  16. {
  17. for(c=0;c<10;c++)printf("X");
  18. printf("n");
  19. }
  20. void y()
  21. {
  22. for(c=0;c<10;c++)printf("Y");
  23. printf("n");
  24. }
  25.  
  26.  
  27. void* writeX(void* unused)
  28. {
  29. while(TRUE)
  30. {
  31. wait(&mutex);
  32. x();
  33. signal(&mutex);
  34. }
  35. }
  36. void* writeY(void* unused)
  37. {
  38. while(TRUE)
  39. {
  40. wait(&mutex);
  41. y();
  42. signal(&mutex);
  43. }
  44. }
  45.  
  46. int main(void)
  47. {
  48. int pid;
  49. x();
  50. /*
  51. pid=fork();
  52. if(pid == 0)
  53. {
  54. //-------- the child process -------------//
  55. writeX(NULL);
  56. }
  57. else
  58. {
  59. //-------- the parent process -------------//
  60. writeY(NULL);
  61. }
  62. */
  63. ///*
  64. pthread_create (&thread1, NULL,&writeX, NULL);
  65. pthread_create (&thread2, NULL,&writeY, NULL);
  66. pthread_join (thread1, NULL);
  67. pthread_join (thread2, NULL);
  68. //*/
  69. return 0;
  70. }
  71.  

ففى هذا المثال قمت باستخدام خوارزم ال semaphore مع ال threads بدلا من استخدامه مع ال process ولذلك لاننى لا استطيع ان اجعل المتغير mutex مشترك shared بين العمليتان

بالرغم من ان الحل صحيح الا اننى اجد اثناء تنفيذه خرج ليس كما هو متوقع فالخرج المتوقع هو كتابة عشرة X ثم عشرة Y ولكن ما يحدث انه يستمر كتابة عدد كبير من ال X ثم يستمر يكتب عدد كبير ايضا من ال Y

هل من احد يساعدنا فى فهم لماذا كان الخرج هكذا وما هو الحل الامثل

والله الموفق

amdvsintel22.jpg

--i use AMD--

لا اله الا الله محمد رسول الله

أستعن بالله و لا تعجز

تابعنى على تويتر

***

#9

eramaxمشكوووووووووووور والله يجزيك الخير

هل من احد يساعدنا فى فهم لماذا كان الخرج هكذا وما هو الحل الامثل :wink:

:blush:

بس للعلم داه مش اختبار داه تمرين مو اكثر اريد ان اعرف حله بالسرعة القصوى :S

ياريت يساعدنا الاخ برق اذا ممكن بالسرعة القصوى

تم تعديل هذه المشاركة بواسطة heba2009 في 5 سبتمبر 2008 في 02:07

linux programing headache

الحياة اصعب مما تبدو عليه احيانا

#10

السلام عليكم ، بصراحة لا أستطيع افادتك بشكل تام ، حيث أن الموضوع بالنسبة لي كان من الناحية النظرية ، ولم أدخل في الناحية العملية بعد.

ولقد أفدت أن هذا الاختبار عبارة عن تمرين ، وهذا مخالف لقوانين المنتدى ،

يمكنك أن تسألي أسألة لتوضيح بعض الأمور ، لا أن يقوم أي عضو بالحل.

والأخ eramax أرسل بالحل ، ولم يعجبك حله ، فماذا نفعل أكثر من ذلك؟!

وأيضا تريدين أن تفهم لماذا خرج output هكذا!!!!

أنا أريد أن أبين لك الحيثيات التي بسببها سأقوم بإغلاق هذا الموضوع ، حتى لا يكون في نفسك شيء ضدنا.

يمكن أن نتعاون على الحل في المشاكل التي تواجهنا في الأمور العملية ، لا أن نرسل الحل للواجبات.

أرجو تفهم موقفنا.

تم تعديل هذه المشاركة بواسطة برق في 5 سبتمبر 2008 في 02:32

System Engineer

Red Hat Certified Engineer

Red Hat Certificate Number

805010381752078

هذا الموضوع مغلق.

مواضيع مشابهة