Posix Threads Kommunikation über Message Queues??

S

ssoul21

Grünschnabel
Hallo Leute,
ich hätte da mal eine Frage, bei der Suche hab ich nichts finden können, und zwar soll ich eine Kommunikation zwischen Threads über Message Queues der Länge 5 realisieren, leider hab ich da keinen Plan wie das gehen soll. Ich soll also ein Wörterbuch programmieren da sollen zwischen den Threads Informationen durch Queues der Länge 5 ausgetauscht werden. Könnte mir da jemand mit einem Beispiel helfen, wie man generell mit Queues arbeitet, in Bezug auf Threadkommunikation?

Lg,ssoul
 
hiho

schau dir mal rabbitMQ oder activeMQ an. Das sind beide Jobqueues denke das ist was du suchst.

Greetz
 
Hi,
ich denke mal, dass der Sinn der Aufgabe ist, Synchronisation von Ressourcenzugriffen zu bewerkstelligen. Eine Message Queue auf Enterprise-Ebene ist da vielleicht etwas mit Kanonen auf Spatzen...

Ein sehr gutes Buch zu dem Thema ist das OpenBook "The Little Book of Semaphores" http://www.greenteapress.com/semaphores/ . In diesem werden zwar hauptsächlich Semaphore in einem Python-ähnlichen Pseudocode benutzt, im Anhang wird allerdings beschrieben, wie mit Hilfe von Unix Semaphoren bzw. Posix Mutexes und Conditions die Aufgaben in C gelöst werden können.

MfG,
baggio
 
Vielen Dank für die Hinweise:)
Hab in der Zwischenzeit mal weiter recherchiert und bin , glaube ich zumindest, schon einen Schritt weiter gekommen. Habe jetzt eine MessageQueue aufgestellt und initiiert. Nun müsste ich nur noch die gegenseite realisieren, also das senden von Messages an diese Queue.

So sieht es bis jetzt aus:

struct mq_attr attr; //Eigenschaften der MessageQueue --> Nachrichtenlänge einstellen (5)
mqd_t mqdes; //MessageQueueDeskriptor,,, ähnlich FileDescriptor (Posix)
char buf[MSG_SIZE]; //Nachrichtenpuffer mit eingestellter Speichergröße
unsigned int prio; //Nachrichtenpriorität, eventuell vorläufig unwichtig

//Attribute einstellen: - 5 Nachrichten
// - Nachrichtenlänge siehe Puffer
// - flags 0 ->?

attr.mq_maxmsg= 5;
attr.mq_msgsize= MSG_SIZE;
attr.mq_flags=O_NONBLOCK;

//Neue MessageQueue öffnen mit obrigen Attributen

mqdes= mq_open("My-Queue", O_RDWR |O_CREAT, 0664,&attr);

//Message Queue attribut noch einmal holen--->>eventuell überflüssig?
mq_getattr(mqdes,&attr);
printf("\%d messages are currently on the queue.\n",attr.mq_curmsgs);

if(attr.mq_curmsgs !=0)
{


attr.mq_flags = O_NONBLOCK;


//Messages auslesen sollte so gehen, laut MAN

while(mq_receive(mqdes,&buf[0],MSG_SIZE,&prio)!=-1)
{
printf("\nReceived a message with priority %d.\n",prio);

//bei Fehler überprüfen auf EAGAIN ->?

if(errno!=EAGAIN){

perror("mq_receive()");
_exit(EXIT_FAILURE);
}


}
 
Zuletzt bearbeitet:

Ähnliche Themen

HP PSC 2175 - CUPS druckt nicht

Problem mit Apache2 + MySQL Server

Mein Netzwerk-Thread

Preview KDE4

mehrere Domains über einen Router verbinden

Zurück
Oben