Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
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;
}
Exemplo n.º 4
0
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;
}
Exemplo n.º 5
0
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;
}
Exemplo n.º 6
0
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;
}