GNU libgomp: Implementing CRITICAL construct

Next: Implementing ATOMIC construct, Previous: Implementing MASTER construct, Up: The libgomp ABI [Contents][Index]

### 9.2 Implementing CRITICAL construct

Without a specified name,

      void GOMP_critical_start (void);
      void GOMP_critical_end (void);

so that we don’t get COPY relocations from libgomp to the main application.

With a specified name, use omp_set_lock and omp_unset_lock with name being transformed into a variable declared like

      omp_lock_t gomp_critical_user_<name> __attribute__((common))

Ideally the ABI would specify that all zero is a valid unlocked state, and so we wouldn’t need to initialize this at startup.