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

Operating System

بدأه mmm43 في 22 مايو 2009 · 2 رد · 476 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكــم ورحمـة الله وبركاتــه ،،

اما بعد اخواني الاعزاء هناك موضوع مهم في operating system الا وهو critical section

وهو لايسمح بتنفيذ عمليتين في ان واحد ...

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

اي برنامج لايسمح لعمليتين بالتنفيذ في وقت واحد ...

#2

السلام عليكم أخي

يمكن تطبيق ذلك باستخدام ما يسمى بمفهوم التزامن Syncronization

كود يوضح العملية السابقة :



public class CriticalSection {

private int totalMoney = 100000;
public CriticalSection(){

Withdraw w1 = new Withdraw();
w1.setName("Mohamed");
Withdraw w2 = new Withdraw();
w2.setName("Iman");
Diposite d1 = new Diposite();
d1.setName("Samir");
Withdraw w3 = new Withdraw();
w3.setName("Fahed");
Diposite d2 = new Diposite();
d2.setName("Jamal");
Diposite d3 = new Diposite();
d3.setName("Lona");

d2.start();
w1.start();
w2.start();
d3.start();
w3.start();
d1.start();



}
private class Withdraw extends Thread{
public void run(){
int process = 0;
while( process < 10 ){
Random r = new Random();
int amount = 1 + r.nextInt(2000);

widthdraw(amount,process);

process++;
}

}
synchronized void widthdraw(int amount,int process){
if( amount <= totalMoney ){
System.out.println("WITHDRAWING NO : "+process);
System.out.println("Before Withdrawing Amount : "+totalMoney+"$");
totalMoney -= amount;
System.out.println("withdrew "+amount+"$ by : " + getName() );
System.out.println("Total : " + totalMoney + "$");
System.out.println("****************************************");
}

else
System.out.println(getName() + "can't withdraw "+ amount);
}
}
private class Diposite extends Thread{
public void run(){
int process = 0;
while( process < 10 ){
Random r = new Random();
int amount = 1 + r.nextInt(5000);
diposite(amount,process);
process++;
}
}
synchronized void diposite(int amount,int process){
System.out.println("DIPOSITING NO : "+process);
System.out.println("Before Dipositing Amount : "+totalMoney+"$");
totalMoney += amount;
System.out.println(" diposite "+amount+"$ by : " + getName() );
System.out.println("Total : " + totalMoney + "$");
System.out.println("****************************************");
}
}
public static void main(String[]args){
new CriticalSection();
}
}
 import java.util.Random;

حيث أن المنطقة المسماة ب Critical Section هي منطقة الدالة withdraw و الدالة diposite

#3

على فكرة طلبك غريب ولا أرى له تبرير غير أنه واجب

لكني سأفترض حسن النوايا

ما الذي تعنيه بكلمة عمليتين في هذه الجملة

اقتباس
اي برنامج لايسمح لعمليتين بالتنفيذ في وقت واحد ...

هل تقصد خيوط Threads أم تقصد وظائف methods؟

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

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