c++lockingopenmpcritical-section

How to use lock in OpenMP?


I have two pieces of C++ code running on 2 different cores. Both of them write to the same file.

How to use OpenMP and make sure there is no crash?


Solution

  • You want the OMP_SET_LOCK/OMP_UNSET_LOCK functions: https://hpc.llnl.gov/tuts/openMP/#OMP_SET_LOCK

    Basically:

    omp_lock_t writelock;
    
    omp_init_lock(&writelock);
    
    #pragma omp parallel for
    for ( i = 0; i < x; i++ )
    {
        // some stuff
       omp_set_lock(&writelock);
        // one thread at a time stuff
        omp_unset_lock(&writelock);
        // some stuff
    }
    
    omp_destroy_lock(&writelock);
    

    Most locking routines such as pthreads semaphores and sysv semaphores work on that sort of logic, although the specific API calls are different.