You are not logged in.

  • Login

1

Sunday, May 15th 2011, 11:13am

Bierlieferung_simulation

Hallo liebe C Freunde!

Ich habe ein Programm geschrieben welches mir den Vorgang bei einer Brauerei simuliert:

Ein Arbeiter holt 3 kisten aus dem lager bringt sie zum lkw. Der Arbeiter braucht 2 minuten im lager und 3 minuten zum lKW hin ...
dieser Vorgang wird wieder holt bis 12 Kisten im LKW sind erst dann darf der LKW losfahren.

Der LKW fährt also zum Kunden braucht 4 minuten fahrzeit hin und zurück

beim Kunden wird der Lkw wieder enladen hier kann ein Arbeiter nur 2 kisten nehmen braucht 1 minute auf dem LKW und 4 Minuten vom LKW zum lager wenn der Lkw wieder leer ist fährt er wieder zurück zur brauerei wo er wieder beladen wird dieser vorgang geht dann immer so weiter.

So nun darf aber auf den LKW immer nur ein Arbeiter sein das heißt alle anderen Arbeiter müssen warten !

Ich habe das ganze nun mit Semaphoren und Sharedmemory umgesetzt hier mal der VerladeArbeiter bei der Brauerei als beispiel in Pseudocode:

C/C++ Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
semaphore LKW_kunde;
semaphore LKW_Brauerei;
semaphore mutex;
semaphore abfahrt;
int LKW_kisten ;   // Shared memory
 
//init
abfahrt = 0;	
LKW_brauerei = 12;				// 12 Plätze auf dem LKW vorhanden
LKW_kunde = 12;
mutex = 1;  
LKW_Kisten = 0;
 
void VerladeArbeiter(kisten)
{
	sleep(2);   // 2 minuten im lager
	sleep(3);  // 3 minuten zum lkw
	wait(LKW_brauerei, kisten); 	// veringert den wert der Semaphore um "kisten" wenn größer 0 prozess darf betreten werden
	wait(mutex);   // sichert sich den zugriff auf lkw oder betritt lkw
	LKW_kisten + = kisten;
 
  if (LKW_kisten == 12)
  {
    	signal(abfahrt);
 
  }
   	signal (mutex);                        // Arbeiter verlässt lkw der nächste darf betreten                 	
}


wait = P() und signal = V() http://www.fh-wedel.de/~si/seminare/ws04…mmierung/2c.htm

nun kann ich leider nicht den kompletten code hier posten das wäre einfach zu lang ich habe nun also 3 porzesse VerladeArbeiter LKWFahrer und VlerladeArbeiterKunde
das ganze hab ich in C implementiert und funzt soweit auch gut heißt also die Semaphoren werden angelegt der Shared memory auch er läuft in die einzelen prozesse rein und gibt auch entsprechende ausgaben!

nur der Scheduler mag nicht so recht er Fängt nämlich beim Kunden an läuft ein paar mal durch springt dann zum VerladeArbeiter bei der Brauerei und dann mal kurz zum LKW fahrer :

Ich vermute das liegt daran wie ich meine Prozesse erzeuge das geschieht nämlich über fork () in der main

C/C++ Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/* Erzeugen eines neuen Prozesses */
 
	cpid1 = fork();
 
	/* Fehlerbehandlung */
 
	if(cpid1 == -1)
	{
		fprintf(stderr,"Fehler bei fork()\n");
		exit(0);
	}
 
	if(cpid1 == 0)
	{
	 	 Verlade_Arbeiter(bier_brauerei);
		 while(1);			  	
	}


das gaze natürlich 3 mal einmal mit lkw fahrer, verladeArbeiter, und VerladeArbeiterkunde

Also ist die Frage nun wie kann ich den das Steuern ich möchte nur mit dem VerladeArbeiter an der Brauerei anfangen und dann eben durch die Semaphoren hin und her wechseln!

Und nicht das der Scheduler nun wilkürlich hin und her springt und nur teile der Prozesse ausführt ???

Kann mir da jemand helfen ?

Danke im vorraus und sorry für den langen Text ;)

2

Sunday, May 15th 2011, 5:30pm

Hat sich erledigt :) Eine Semaphore war falsch initialisiert weshalb immer hin und her geweschelt wurde


Trotzdem danke !

Social bookmarks