/* gomp_hal_init_lock () - get a lock */ void gomp_hal_init_lock(unsigned int *id) { gomp_hal_lock((unsigned int *) next_lock_lock); *id = (*next_lock); (*next_lock) += sizeof(int); gomp_hal_unlock((unsigned int *) next_lock_lock); }
inline int gomp_work_share_start (gomp_work_share_t *ws) { unsigned int myid; /* Acquire the ws */ gomp_hal_lock(ws->enter_lock); if (ws->checkfirst != WS_INITED) { ws->checkfirst = WS_INITED; return 1; } return 0; }
inline gomp_work_share_t * gomp_new_work_share() { gomp_work_share_t * new_ws; #ifdef HEAP_HANDLERS new_ws = (gomp_work_share_t *) shmalloc(heap_handler, sizeof(gomp_work_share_t)); #else new_ws = (gomp_work_share_t *) shmalloc(sizeof(gomp_work_share_t)); #endif gomp_hal_lock(NEXT_LOCK_LOCK_PTR); new_ws->lock = (omp_lock_t *) ((*next_lock) += (SIZEOF_INT * 2)); // Only two: exit_lock == enter_lock *NEXT_LOCK_LOCK_PTR = 0; new_ws->enter_lock = (omp_lock_t *) (((unsigned int) new_ws->lock) + SIZEOF_INT); new_ws->exit_lock = new_ws->enter_lock; return new_ws; }
void omp_set_lock(omp_lock_t *lock) { gomp_hal_lock(lock); }