\subsection{Ownership of Locks} \label{subsec:lock_owner} \index{routines!omp_unset_lock@\kcode{omp_unset_lock}} \index{omp_unset_lock routine@\kcode{omp_unset_lock} routine} Ownership of locks has changed since OpenMP 2.5. In OpenMP 2.5, locks are owned by threads; so a lock released by the \kcode{omp_unset_lock} routine must be owned by the same thread executing the routine. Beginning with OpenMP 3.0, locks are owned by tasks; so a lock released by the \kcode{omp_unset_lock} routine in a task must be owned by the same task. This change in ownership requires extra care when using locks. The following program is conforming in OpenMP 2.5 because the thread that releases the lock \ucode{lck} in the \kcode{parallel} region is the same thread that acquired the lock in the sequential part of the program (primary thread of \kcode{parallel} region and the initial thread are the same). However, it is not conforming beginning with OpenMP 3.0, because the task region that releases the lock \ucode{lck} is different from the task region that acquires the lock. \cexample[5.1]{lock_owner}{1} \fexample[5.1]{lock_owner}{1}