Sie sind nicht angemeldet.

  • Anmelden

1

20.06.2008, 14:24

C-Programmierung/Semaphoren

In der Vorlesung wurde das Problem der Produzenten und Konsumenten behandelt. Schreiben Sie ein Programm, bei dem zwei Threads (je ein Produzent und ein Konsument) auf einen gemeinsamen Puffer zugreifen. Schützen Sie den gemeinsamen Puffer mit POSIX-Realtime-Semaphoren geeignet ab.
Die beiden Threads sollen jeweils die produzierten/konsumierten Daten (Integer-Werte) ausgeben.
Eine mögliche Ausgabe könnte dabei wie folgt aussehen:

Produced: 719885386
Consumed: 719885386
Produced: 1189641421
Produced: 1350490027
Consumed: 1189641421
Produced: 2044897763
Consumed: 1350490027
Consumed: 2044897763
Produced: 304089172
Consumed: 304089172


Kann mir da jemand helfen?
Links zu Lösungen von ähnlichen Aufgabe oder macht sich vielleicht sogar jemand die Mühe selbst was zu programmieren? Wäre nett, komme net so richtig voran mit der Aufgabe:\
thx

2

20.06.2008, 14:26

achso, auch wenn mans am Threadtitel erkennen sollte, die aufgabe muss in C programmiert werden

3

20.06.2008, 15:08

Is die der Prinzipielle Ablauf klar?

Hab leider alle Funktionsnamen vergessen, die damit zusammenhaengen, aber das ist sowas von easy zu loesen, dauert keine Stunde (ich hab aberkeine Zeit, bin am arbeiten und dann hab ich ne 7h Autofahrt vor mir)

Du brauchst 1 Semaphor und pro Thread eine Condition.

Der Schreiberthread schreibt bis der puffer voll ist und dann legt er sich schlafen, definiert aber ein condition_signal, so dass er informiert wird wenn am Sempahor was veraendert wurde


dann wacht er auf und schaut ob platz da ist, wenn ja schreibt er wieder und legt sich dann wieder mit der condition schlafen

der leser versucht zu lesen bis es net mehr geht ( am anfang kann er meist gar nix lesen weil nix da is), dann legt er sich schlafen mit ner condition

kommt das signal, so versucht er wieder zu lesen


Das Semaphor ist fuer die Synchronisation zustaendig (ok das ist etwas ungenau, aber vielleicht hilfts ja im Verstaendnis), die conditions sind da, um Polling (aktives Warten) zu vermeiden.

4

20.06.2008, 15:54

In Modern Operating Systems von Tanenbaum (dritte Ausgabe, in der weitverbreiteten zweiten Ausgabe wird es sicherlich auch sein) wird das ziemlich ausführlich beschrieben. Sollte in jeder Informatik-Bibliothek vorhanden sein.

6

20.06.2008, 16:33

Zitat

Original von kOa_Borgg
google?


mh was ist das? noch nie von gehört..

thx dem rest:)

7

20.06.2008, 16:46

Zitat

noch nie von gehört..


dann google es doch, sowas sollte man schon wissen

ich weiß, Schenkelklopfer...

8

20.06.2008, 16:58

http://www.galileocomputing.de/openbook/…ru/node394.html

Kann nur das openbook empfehlen
Da wird schön erklärt wie das Prinzip funktioniert und das Beispiel auf dieser Seite kannst du auch verwenden und an dein Producer-Consumer anpassen.


Einfach mal probieren.
Wenns nicht klappen sollte, den Code hier rein posten, dann wird schon geholfen ;)


Und ja, im google findet man schon viele viele fertige Lösungen, aber probiers doch zuerst mal selbst. ;)

9

20.06.2008, 20:28

Zitat

Original von Imp_Tonic
mh was ist das? noch nie von gehört..

Versteh mich nich falsch ... ich helfe normakerweise wirklich gerne bei Fragen. Aber ich finds immer etwas "frech" Dinge zu fragen, bei denen 2-3 Google Anfragen die Lösung recht fix zum Vorschein bringen. Hättest du das gemacht, hier code gepostet und konkret Fragen gestellt... ok.

10

21.06.2008, 00:25

hm dann kann ich wohl nicht googeln oder ich erkenn die lösung nicht^^
wenns so schnell geht mit google kannst es mir ja gern mal zeigen

11

21.06.2008, 12:13

'Nebenläufige und Verteilte Programme' Thomas Letschert.

Wenns das Buch bei dir irrgendwie in der Bibliothek auszuleihen gibt - da steht alles zu dem Thema drin ausführlich auch mit Programmbeispielen in C/C++ unter Linux/Unix.