Ejemplo n.º 1
0
int
whalemating(int nargs, char **args)
{

	int i, j, err=0;
	
	(void)nargs;
	(void)args;

  whalematingMenuSemaphore = sem_create("Whalemating Driver Semaphore", 0);
  if (whalematingMenuSemaphore == NULL) {
    
    // 08 Feb 2012 : GWA : Probably out of memory, or you broke our
    // semaphores! Panicing might be an overreaction, but why not?
    
    panic("whalemating: sem_create failed.\n");
  }
 
  // 13 Feb 2012 : GWA : Students are smarter than me.
  whalemating_init();

	for (i = 0; i < 3; i++) {
		for (j = 0; j < NMATING; j++) {
			switch(i) {
			    case 0:
				err = thread_fork("Male Whale Thread",
						  male, whalematingMenuSemaphore, j, NULL);
				break;
			    case 1:
				err = thread_fork("Female Whale Thread",
						  female, whalematingMenuSemaphore, j, NULL);
				break;
			    case 2:
				err = thread_fork("Matchmaker Whale Thread",
						  matchmaker, whalematingMenuSemaphore, j, NULL);
				break;
			}
			if (err) {
				panic("whalemating: thread_fork failed: (%s)\n",
				      strerror(err));
			}
		}
	}
	for (i = 0; i < 3; i++) {
		for (j = 0; j < NMATING; j++) {
      P(whalematingMenuSemaphore);
    }
  }
  sem_destroy(whalematingMenuSemaphore);
  
  // 13 Feb 2012 : GWA : Students are WAY smarter than me, including Nikhil
  // Londhe.
  whalemating_cleanup();

	return 0;
}
Ejemplo n.º 2
0
int whalemating(int nargs, char **args) {
	(void) nargs;
	(void) args;

	int i, j, err = 0;
	char name[32];

	whalematingMenuSemaphore = sem_create("Whalemating Driver Semaphore",
			0);
	if (whalematingMenuSemaphore == NULL ) {
		panic("whalemating: sem_create failed.\n");
	}

	whalemating_init();

	for (i = 0; i < 3; i++) {
		for (j = 0; j < NMATING; j++) {

			random_yielder(PROBLEMS_MAX_YIELDER);

			switch (i) {
			case 0:
				snprintf(name, sizeof(name), "Male Whale Thread %d", (i * 3) + j);
				err = thread_fork(name, male, whalematingMenuSemaphore, j, NULL);
				break;
			case 1:
				snprintf(name, sizeof(name), "Female Whale Thread %d", (i * 3) + j);
				err = thread_fork(name, female, whalematingMenuSemaphore, j, NULL);
				break;
			case 2:
				snprintf(name, sizeof(name), "Matchmaker Whale Thread %d", (i * 3) + j);
				err = thread_fork(name, matchmaker, whalematingMenuSemaphore, j, NULL);
				break;
			}
			if (err) {
				panic("whalemating: thread_fork failed: (%s)\n",
						strerror(err));
			}
		}
	}

	for (i = 0; i < 3; i++) {
		for (j = 0; j < NMATING; j++) {
			P(whalematingMenuSemaphore);
		}
	}

	sem_destroy(whalematingMenuSemaphore);
	whalemating_cleanup();

	return 0;
}