Commit 392a9c8b authored by Dong Hung Pham's avatar Dong Hung Pham 🤡
Browse files

Replace prak4NEW.cpp. Update with dynamische Erzeugung .

parent 986611ec
......@@ -17,11 +17,11 @@ sem_t semaphoreVerkaufer; // wenn es mindest eine freie Verkaufer gibt , darf di
sem_t semaphoreKundenReihe; //um zu kontrollieren , die genaue reihe von Kunden werden bestellen , vermeiden race condition
sem_t semaphoreVerkauferReihe; //um zu kontrollieren , die genaue reihe von verkaufer create , vermeiden race condition
sem_t sem0;sem_t sem1;sem_t sem2;sem_t sem3;sem_t sem4;sem_t sem5;sem_t sem6;sem_t sem7;// es gibt immer Fehler wenn ich mit dynamische Erzeugung arbeitet
std::vector<sem_t> listSem;// here asume we ,that maximal 8 verkaufer gibt , es gibt nur 4 zutaten, deshalb ist 4 verkaufer ist ideale Arbeitumgebung
sem_t sem01;sem_t sem11;sem_t sem21;sem_t sem31;sem_t sem41;sem_t sem51;sem_t sem61;sem_t sem71;// es gibt immer Fehler wenn ich mit dynamische Erzeugung arbeitet
std::vector<sem_t> listSem2;// here asume we ,that maximal 8 verkaufer gibt , es gibt nur 4 zutaten, deshalb ist 4 verkaufer ist ideale Arbeitumgebung
std::vector<sem_t*> listSem;
std::vector<sem_t*> listSem2;
// every CS has a mutex
pthread_mutex_t Sauce= PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_t Brot= PTHREAD_MUTEX_INITIALIZER;
......@@ -129,7 +129,7 @@ void *verkaufen(void *tid) {
printf("creat verkauferrrrr%ld\n",(long)tid);
sem_post(&semaphoreVerkauferReihe);
while (nichtFertig) {
sem_wait(&listSem2[(long)tid]);// that can we use semaphore instead
sem_wait(listSem2[(long)tid]);// that can we use semaphore instead
int max = 3;
int num;
for (int c = 0; c <= max; c++){
......@@ -142,7 +142,7 @@ sem_post(&semaphoreVerkauferReihe);
vectorCondition[(long)tid] = 0;// lock this thread again
printf("Doener fertig verkaufer Thread No: %ld fuer kunde :%d , with time%ld \n ",(long)tid,vectorKundenBestellung[(long)tid].back(),(long)num);
sem_post(&listSem[(long)tid]);//go get ur bestellung mtf
sem_post(listSem[(long)tid]);//go get ur bestellung mtf
}
......@@ -177,9 +177,9 @@ for (int i=0;i<m;i++) {
sem_post(&semaphoreKundenReihe);
printf("kunden Thread No: %ld\n",(long)tid);
vectorKundenBestellung[i].push_back((long)tid);//long(tid) kunde come and orde at (i) verkaufer
sem_post(&listSem2[i]);
sem_post(listSem2[i]);
vectorCondition[i] = 1;//to announce , that thread verkaufer (i) got a job
sem_wait(&listSem[i]);// mwait verkaufer wake up
sem_wait(listSem[i]);// mwait verkaufer wake up
pthread_mutex_unlock(& listMutexVerkaufen[i]); //unlock this thread
sem_post(&semaphoreVerkaufer);// sem_post , ready for next kunden
......@@ -235,10 +235,16 @@ int main(int argc,char* argv[]) {
m = atoi(argv[1]); n = atoi(argv[2]); r = atoi(argv[3]); k = atoi(argv[4]);t =atoi(argv[5]) ;
printf("check %d\n",m);
nSauce = n;nBrot =n;nFleisch=n;nSalat = n;
sem_init(&sem0, 0, 0);sem_init(&sem1, 0, 0);sem_init(&sem2, 0, 0);sem_init(&sem3, 0, 0);sem_init(&sem4, 0, 0); //init sem
listSem.push_back(sem0);listSem.push_back(sem1);listSem.push_back(sem2);listSem.push_back(sem3);listSem.push_back(sem4);
sem_init(&sem01, 0, 0);sem_init(&sem11, 0, 0);sem_init(&sem21, 0, 0);sem_init(&sem31, 0, 0);sem_init(&sem41, 0, 0); //init sem
listSem2.push_back(sem01);listSem2.push_back(sem11);listSem2.push_back(sem21);listSem2.push_back(sem31);listSem2.push_back(sem41);
for (int i = 0; i< m;i++){
sem_t* newSem = new sem_t;
sem_init(newSem,0,0);
listSem.push_back(newSem);
}
for (int i = 0; i< m;i++){
sem_t* newSem = new sem_t;
sem_init(newSem,0,0);
listSem2.push_back(newSem);
}
sem_init(&semaphoreVerkauferReihe, 0, 1);
init_verkaufer(m);
sem_init(&semaphoreVerkaufer, 0, m);
......@@ -246,3 +252,24 @@ int main(int argc,char* argv[]) {
init_kunden(k);
return 0;
}//main
  • @l.burchard hallo Her Buchard, ich entschuldige Ihnen weil ich ihre comment erst gelesen hab. Das hab ich verbessert mit vector from pointer und dynamische Erzeugung abhangig von m -verkaufer.

  • ok, jetzt ist das in Ordnung. Die Lösung ist allerdings sehr kompliziert, das kann man erheblich einfacher machen, wenn Sie Kunden als Erzeuger und Verkäufer als Verbraucher betrachten und damit dann das Erzeuger/Verbraucher Problem lösen.

    Mit freundlichen Grüßen

    Lars-Olof Burchard

Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment