void female(void *p, unsigned long which) { struct semaphore * whalematingMenuSemaphore = (struct semaphore *)p; //(void)which; female_start(); // Implement this function //extern int male_head, male_tail, female_tail; //extern unsigned long female_pop[]; //extern struct lock *pop_lock; //extern struct cv *maker_cv; lock_acquire(pop_lock); female_pop[female_tail++] = which; if(male_head != male_tail) cv_signal(maker_cv, pop_lock); lock_release(pop_lock); female_end(); // 08 Feb 2012 : GWA : Please do not change this code. This is so that your // whalemating driver can return to the menu cleanly. V(whalematingMenuSemaphore); return; }
void female(void *p, unsigned long which) { struct semaphore * whalematingMenuSemaphore = (struct semaphore *)p; (void)which; female_start(); lock_acquire(female_lock); lock_acquire(thread_count_lock); thread_count++; if (thread_count == 3) { cv_broadcast(thread_count_cv, thread_count_lock); } else { cv_wait(thread_count_cv, thread_count_lock); } thread_count = 0; lock_release(thread_count_lock); lock_release(female_lock); female_end(); // 08 Feb 2012 : GWA : Please do not change this code. This is so that your // whalemating driver can return to the menu cleanly. V(whalematingMenuSemaphore); return; }
void female(void *p, unsigned long which) { struct semaphore * whalematingMenuSemaphore = (struct semaphore *)p; (void)which; female_start(); V(femalesem); //P(malesem); P(testsem2); /* V(testsem); V(testsem); V(testsem); P(testsem); V(testsem); V(testsem2); V(testsem2); V(testsem2); P(testsem2); */ female_end(); /*V(testsem2); */ //V(matchmakersem); //V(malesem); // 08 Feb 2012 : GWA : Please do not change this code. This is so that your // whalemating driver can return to the menu cleanly. V(whalematingMenuSemaphore); return; }
void female(void *p, unsigned long which) { struct semaphore * whalematingMenuSemaphore = (struct semaphore *)p; (void)which; female_start(); // Implement this function lock_acquire(whaleLock); // Implement this function if (wchan_isempty(maleCv->cv_wchan) || wchan_isempty(matchMakerCv->cv_wchan)) { cv_wait(femaleCv,whaleLock); }else{ cv_signal(maleCv,whaleLock); cv_signal(matchMakerCv,whaleLock); } lock_release(whaleLock); female_end(); // 08 Feb 2012 : GWA : Please do not change this code. This is so that your // whalemating driver can return to the menu cleanly. V(whalematingMenuSemaphore); return; }
void female(void *p, unsigned long which) { struct semaphore * whalematingMenuSemaphore = (struct semaphore *)p; (void)which; female_start(); kprintf("SStarting Female %lu\n",which); lock_acquire(wm_lock); females++; cv_signal(wm_mmcv,wm_lock); cv_wait(wm_mcv,wm_lock); kprintf("Releasing Female"); lock_release(wm_lock); female_end(); // 08 Feb 2012 : GWA : Please do not change this code. This is so that your // whalemating driver can return to the menu cleanly. V(whalematingMenuSemaphore); return; }
void female(void *p, unsigned long which) { struct semaphore * whalematingMenuSemaphore = (struct semaphore *)p; (void)which; female_start(); lock_acquire(hold); V(female_sem); female_count++; if(male_count!=0) cv_signal(mate_cv,hold); else cv_wait(mate_cv,hold); lock_release(hold); // Implement this function female_end(); // 08 Feb 2012 : GWA : Please do not change this code. This is so that your // whalemating driver can return to the menu cleanly. V(whalematingMenuSemaphore); return; }