/* kthread creation */ int kthread_create(kthread_t *tid, int (*kthread_start_func)(void *), void *arg) { int retval = 0; void **stack; int stacksize; stacksize = KTHREAD_DEFAULT_SSIZE; /* Create the new thread's stack */ if(!(stack = (void **)MALLOC_SAFE(stacksize))) { perror("No memory !!"); return -1; } stack = (void*)((char*)stack + stacksize); retval = clone(kthread_start_func, stack, CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | SIGCHLD, arg); if(retval > 0) { *tid = retval; return retval; } return -1; }
void set_grid(void) { MALLOC_SAFE(( rc = (double *)malloc(sizeof(double)*NR))); MALLOC_SAFE((rmin = (double *)malloc(sizeof(double)*(NR+1)))); MALLOC_SAFE((lam = (double *)malloc(sizeof(double)*NR))); MALLOC_SAFE((mdot = (double *)malloc(sizeof(double)*NR))); MALLOC_SAFE((dr = (double *)malloc(sizeof(double)*NR))); dlr = log(params.ro/params.ri)/((double)NR); MALLOC_SAFE((lrc = (double *)malloc(sizeof(double)*NR))); MALLOC_SAFE((lrmin = (double *)malloc(sizeof(double)*(NR+1)))); MALLOC_SAFE(( taumin = (double *)malloc(sizeof(double)*(NR+1)))); MALLOC_SAFE(( tauc = (double *)malloc(sizeof(double)*NR))); MALLOC_SAFE(( weights = (double *)malloc(sizeof(double)*NR))); int set_flag = TRUE; int i; for(i=0;i<NR+1;i++) { lrmin[i] = log(params.ri) + i*dlr; rmin[i] = exp(lrmin[i]); taumin[i] = 0; } for (i=0;i<NR;i++) { rc[i] = .5*(rmin[i] + rmin[i+1]); lrc[i] = log(rc[i]); dr[i] = rmin[i+1]-rmin[i]; lam[i] = 0; tauc[i] = 0; weights[i] = 1; } weights[0] = 0.5; weights[NR-1] = 0.5; printf("Grid spacing is dlr = %.3e\n",dlr); if (params.forced_torque) { read_torque_file(&fld,params.torque_file); } set_mdot(params.planet_torque); return; }
int main() { uthread_struct_t *uthread; uthread_t u_tid; uthread_arg_t *uarg; int inx; gtthread_app_init(); for(inx=0; inx<NUM_THREADS; inx++) { uarg = (uthread_arg_t *)MALLOC_SAFE(sizeof(uthread_arg_t)); uarg->num2 = (inx % MAX_UTHREAD_GROUPS); uarg->num3 = 0x55; uarg->num4 = 0x77; uthread_create(&u_tid, func, uarg, (inx % MAX_UTHREAD_GROUPS)); uarg->num1 = u_tid; } gtthread_app_exit(); return(0); }