PDA

Tam Sürümünü Görmek İçin : C++ threads


galaxy22
22/06/2007, 02:57
Arkadaslar bu programin uygulanmasinda producer/consumer de problem var ama ben bunlari bir turlu duzeltemedim while loops lari nasil degistirmek lazim ikisininde sorunsuz calismasi icin? Bana bu konuda yardimci olursaniz sevinirim.


#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 ;
}


Flagrant
22/06/2007, 09:12
while(true) veya while(1) yapsan

galaxy22
23/06/2007, 15:45
arkadaslar buna yorum yokmu ?

golgepapaz
23/06/2007, 16:42
problemin ne oldugunu soylemedegin icin atmak zorundayim(buraya posta gonderenlerin genel problemi sanki) .Posix threadlerinden cok anlamam ama, gordugum kadariyla semaphor yaratip hicbirsey yapmiyorsun, sanirim yapmaya calistigin producer yazarken consumerin okumamasini saglamak(yada tersi) , bu durumda semaphore.h dosyasina bakarsak sem_wait ve sem_post dosyalariyla kaynaga erismeyi siralaman gerekmiyor mu?

galaxy22
24/06/2007, 00:36
evet haklisin aynen dedigin gibi consumer calisirker producer durmasi lazim procuder calisirsada tam tersi. Ama benim bu konuda nasil yapilacagi hakkinda bir fikrim yok ornekle aciklarmisin?