예제 #1
0
/* 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);
}
예제 #2
0
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;
}
예제 #3
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;
}
예제 #4
0
void omp_set_lock(omp_lock_t *lock) {
    gomp_hal_lock(lock);
}