Esempio n. 1
0
int main(int argc, char *argv[]) {
    uthread_t a[2];
    uthread_t b[2];

    uthread_mutex_init(&mut);
    uthread_cond_init(&c1);
    uthread_cond_init(&c2);

    uthread_create(&a[0], thread1, NULL);
    uthread_create(&a[1], thread1, NULL);
    uthread_create(&b[0], thread2, (void *) 0);
    uthread_create(&b[1], thread2, (void *) 1000);

    uthread_join(a[0], NULL);
    uthread_join(a[1], NULL);
    uthread_join(b[0], NULL);
    uthread_join(b[1], NULL);

    printf("%ld\n", cnt);

    return 0;
}
Esempio n. 2
0
int rms_init(void) {
	int ret;
	struct hostent *hp;

	rmsb->version = 0;
	mqueue_init( &(rmsb->mq_channels), 3);
	syncqueue_init( &(rmsb->mq_channels_tmp), 3);
	syncqueue_init( &(rmsb->mq_meta_msg_pool), 10);

	uthread_mutex_init(&mutx_rmscb);

	rmsb->state = 0;

	rmsb->hostname = (char*)malloc(64);

	if(gethostname(rmsb->hostname, 64) < 0)
		return -1;

	hp = gethostbyname(rmsb->hostname);
	rmsb->id = ((struct in_addr*)hp->h_addr)->s_addr;

	memcpy(rmsb->ip_addr,hp->h_addr, sizeof(ip_addr));

	rms_peer_init(&rmsb->self, rmsb->hostname, rmsb->id);
	rmsb->initialized = RMS_INITIALIZED;

	rmsb->maxsock = 0;
	rmsb->n_channels = 0;

	rmsb->sock = 0;
	rmsb->listening = 0;
	rmsb->error = 0;
	rmsb->active = 1;

	//init threads
	if(uthread_init(& (rmsb->rms_mgr_thr), rms_manager, 1) < 0) {
		rmsb->error = RMS_ERR_THREADING;
		return -1;
	}
	if(uthread_init(& (rmsb->rms_snd_thr), rms_sender, 1) < 0) {
		rmsb->error = RMS_ERR_THREADING;
		return -1;
	}
	if(uthread_init(& (rmsb->rms_rcv_thr), rms_receiver, 1) < 0) {
		rmsb->error = RMS_ERR_THREADING;
		return -1;
	}

	//start threads
	if(uthread_start(&(rmsb->rms_mgr_thr), rmsb) < 0) {
		rmsb->error = RMS_ERR_THREADING;
		return -1;
	}
	if(uthread_start(&(rmsb->rms_snd_thr), rmsb) < 0) {
		rmsb->error = RMS_ERR_THREADING;
		return -1;
	}
	if(uthread_start(&(rmsb->rms_rcv_thr), rmsb) < 0) {
		rmsb->error = RMS_ERR_THREADING;
		return -1;
	}
	return 0;
}