Beispiel #1
0
int rms_shutdown(void) {
	rms_channel *channel;

	rmsb->active = 0;

	uthread_destroy(&(rmsb->rms_rcv_thr));
	uthread_destroy(&(rmsb->rms_snd_thr));
	uthread_destroy(&(rmsb->rms_mgr_thr));

	if(rmsb->listening) {
		shutdown(rmsb->sock);
		close(rmsb->sock);
	}

	while( (channel = (rms_channel*)mqueue_remove(rmsb->mq_channels))) {
		rms_channel_close(channel);
	}
	mqueue_destroy( rmsb->mq_channels);

	uthread_mutex_lock(&rmsb->mutx_rmscb);
	while( (channel = (rms_channel*)mqueue_deq(rmsb->mq_channel_tmp))) {
		rms_channel_close(channel);
	}
	mqueue_destroy( rmsb->mq_channels_tmp);
	uthread_mutex_unlock(&rmsb->mutx_rmscb);
	uthread_mutex_destroy(&rmsb->mutx_rmscb);

	rmsb->state = 0;
	free(rmsb->hostname);

	rmsb->initialized = -1;
	return 0;
}
Beispiel #2
0
int main (int argc, char** argv) {
  assert (NUM_PRODUCERS == NUM_CONSUMERS);

  mx = uthread_mutex_create();
  not_empty = uthread_cond_create(mx);
  not_full = uthread_cond_create(mx);

  uthread_init(NUM_PRODUCERS + NUM_CONSUMERS);
  uthread_t producers[NUM_PRODUCERS];
  uthread_t consumers[NUM_CONSUMERS];

  for (int i = 0; i < NUM_PRODUCERS; i++) {
    consumers[i] = uthread_create(consumer, NULL);
    producers[i] = uthread_create(producer, NULL);

  }

  for (int i = 0; i < NUM_PRODUCERS; i++) {
    uthread_join(consumers[i], NULL);
    uthread_join(producers[i], NULL);
  }

  uthread_cond_destroy(not_full);
  uthread_cond_destroy(not_empty);
  uthread_mutex_destroy(mx);

  printf("Producer Wait Time: %d\tConsumer Wait Time: %d\n",
         producer_wait_count, consumer_wait_count);

  printf("Histogram: [ ");
  int sum = 0;
  for (int i = 0; i < MAX_ITEMS + 1; i++) {
    sum += histogram[i];
    printf("%d ", histogram[i]);
  }
  printf("]\tSum: %d\n", sum);
}