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; }
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; }