Toon posts:

C++ while loops

Pagina: 1
Acties:
  • 395 views sinds 30-01-2008

Verwijderd

Topicstarter
Hoe kan ik deze ‘while loops’ verbeteren en producer en consumer synchroon communiceren ?


#include <fcntl.h>
#include <semaphore.h>
#include <pthread.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

sem_t *mySemaphore ;

#define BUFFERSIZE 1000000
char boundedBuffer[BUFFERSIZE] ;
int filled = -1 , empty = -1 ;

void Produce(void *data) {
int i = 0 ;
while ( i < BUFFERSIZE ) {
boundedBuffer[++filled] = 'A' ;
i++ ;
}
}

void Consume(void *data) {
int i ;
while ( i < BUFFERSIZE) {
if ( boundedBuffer[++empty] != 'A' )
printf("Error consume != A\n"); ;
i++ ;
}
}

int main(int argc, char * argv[]) {
pthread_t p1, p2 ;
int l = 0 ;

mySemaphore = sem_open("MySemaphore",O_CREAT) ;

for ( l = 0 ; l < BUFFERSIZE; l++) boundedBuffer[l] = '.' ;

/* Create our threads */
pthread_create(&p1, NULL,(void *(*)(void *)) Produce, boundedBuffer);
pthread_create(&p2, NULL,(void *(*)(void *)) Consume, boundedBuffer);

/* Wait for our threads */
pthread_join(p1, NULL);
pthread_join(p2, NULL);

return 0 ;
}

Verwijderd

Topicstarter
void Consume(void *data) {
int n = 0 ;
while ( n < BUFFERSIZE) {
if ( boundedBuffer[++empty] != 'A' )
printf("Error consume != A\n"); ;
n++ ;

is die juiste manier?

  • Vincenz0
  • Registratie: Augustus 2006
  • Laatst online: 25-09 14:06

Vincenz0

Coder

Aller eerst: welkom op GoT

Lees voordat je verder vraagt even de programming FAQ door.
Hier staat veel in waar je waarschijnlijk al mee verder kan.

Ik weet niet wat je aan het bouwen bent en of je wel verstand van zaken hebt maar om je simpel te helpen:

Zet de opdrachten uit de 1e while loop in de 2e while loop, vervolgens verwijder je de 1e while loop en natuurlijk zijn threads en pointers.
Het is waarschijnlijk slim om je nieuwe void ook even een juiste naam te geven.

Als ik nu abracadabra voor je spreek lees dan de FAQ nog eens door of lees je even in op C++, veel succes!

Coding 4 Fun!


Verwijderd

Ik heb niet de juiste kennis van semaforen om dit te begrijpen, maar ik kan je wel zeggen dat je meer kans hebt op zinnige antwoorden als je:
[list=1]
• wat tijd besteedt aan een verhaaltje over de situatie, het probleem, en wat je al geprobeerd hebt. Dan begrijpen mensen wat er aan de hand is, en welke oplossingen alvast niet werken.
• de code in de juiste code-tags stopt. In dit geval
code:
1
[code=c++] ... [/]

Dat maakt het wat leesbaarder.

[ Voor 15% gewijzigd door Verwijderd op 28-05-2007 02:35 ]


  • Lone Gunman
  • Registratie: Juni 1999
  • Niet online
de helft van het antwoord om de producer en consumer te synchroniseren is al gegeven in de code zelf. google eens naar semaphore, of meer specifiek naar sem_t example, voor uitleg over het gebruik van semaforen.

Experience has taught me that interest begets expectation, and expectation begets disappointment, so the key to avoiding disappointment is to avoid interest.


Verwijderd

Of sla het boek Operating Systems, Design and Implementation van Tanenbaum er eens op na

Verwijderd

De duitse CT heeft al een tijdje threads als vast programmeerthema. Er waren ook artikelen over pthreads:

1. Oliver Lau (ola)
Tauziehen
Programmieren mit POSIX-Threads
Know-how,Paralleles Rechnen,POSIX Threads, pthreads, Parallel Computing, paralleles Rechnen, Multiprozessorsystem, SMP, shared memory, Thread, Mutex, Conditional Wait, Semaphor, Thread-Programmierung, parallele Programmierung
c't 16/06, Seite 212 kostenpflichtiger Download
kaufen
2. Oliver Lau (ola)
Arbeitsteilung
Grundlagen der Thread-Programmierung
Know-how,Paralleles Rechnen,POSIX Threads, pthreads, Parallel Computing, Paralleles Rechnen, Thread-Programmierung, parallele Programmierung,
c't 16/06, Seite 208 kostenpflichtiger Download
kaufen
3. Jürgen Schmidt (ju)
Doppeltes Spiel
Symetrisches Multiprocessing unter Linux
Report, Linux und SMP, XFracky, MySQL, LinuxThreads, pthreads, Scenic
c't 13/98, Seite 140

Als je wil zorgen dat gedeelde variabelen de boel niet in de war sturen moet je werken met een kritieke sectie

[ Voor 5% gewijzigd door Verwijderd op 28-05-2007 03:51 ]


  • dusty
  • Registratie: Mei 2000
  • Laatst online: 25-11 22:57

dusty

Celebrate Life!

Met: Vincenz0 in "C++ while loops"
Aller eerst: welkom op GoT

Lees voordat je verder vraagt even de programming FAQ door.
Hier staat veel in waar je waarschijnlijk al mee verder kan.
Met: Verwijderd in "C++ while loops"
[list=1]
• wat tijd besteedt aan een verhaaltje over de situatie, het probleem, en wat je al geprobeerd hebt. Dan begrijpen mensen wat er aan de hand is, en welke oplossingen alvast niet werken.
• de code in de juiste code-tags stopt. In dit geval
code:
1
[code=c++] ... [/]

Dat maakt het wat leesbaarder.
En wil je weten hoe je twee threads synchroon kan laten communiceren zal je eens wat moeten lezen over "Concurrent programming"

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR

Pagina: 1

Dit topic is gesloten.