"Fossies" - the Fresh Open Source Software Archive

Member "darktable-3.6.1/src/common/atomic.c" (10 Sep 2021, 1662 Bytes) of package /linux/misc/darktable-3.6.1.tar.xz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "atomic.c" see the Fossies "Dox" file reference documentation.

    1 /*
    2     This file is part of darktable,
    3     Copyright (C) 2020 darktable developers.
    4 
    5     darktable is free software: you can redistribute it and/or modify
    6     it under the terms of the GNU General Public License as published by
    7     the Free Software Foundation, either version 3 of the License, or
    8     (at your option) any later version.
    9 
   10     darktable is distributed in the hope that it will be useful,
   11     but WITHOUT ANY WARRANTY; without even the implied warranty of
   12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   13     GNU General Public License for more details.
   14 
   15     You should have received a copy of the GNU General Public License
   16     along with darktable.  If not, see <http://www.gnu.org/licenses/>.
   17 */
   18 
   19 #include "common/atomic.h"
   20 
   21 extern inline void dt_atomic_set_int(dt_atomic_int *var, int value);
   22 extern inline int dt_atomic_get_int(dt_atomic_int *var);
   23 extern inline int dt_atomic_add_int(dt_atomic_int *var, int incr);
   24 extern inline int dt_atomic_sub_int(dt_atomic_int *var, int decr);
   25 extern inline int dt_atomic_exch_int(dt_atomic_int *var, int value);
   26 extern inline int dt_atomic_CAS_int(dt_atomic_int *var, int *expected, int value);
   27 
   28 #if !defined(__STDC_NO_ATOMICS__)
   29 // using C11 atomics, everything is handled in the header file, so we don't need to define anything in this file
   30 
   31 #elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNU_MINOR__ >= 8))
   32 // using GNU intrinsics. everything is handled in the header file
   33 
   34 #else
   35 // we fell back to using a global mutex for synchronization
   36 // this is that mutex's definition
   37 pthread_mutex_t dt_atom_mutex = PTHREAD_MUTEX_INITIALIZER;
   38 
   39 #endif // __STDC_NO_ATOMICS__