This file is indexed.

/usr/include/gnuastro/threads.h is in libgnuastro-dev 0.5-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
/*********************************************************************
Functions to facilitate using threads.
This is part of GNU Astronomy Utilities (Gnuastro) package.

Original author:
     Mohammad Akhlaghi <akhlaghi@gnu.org>
Contributing author(s):
Copyright (C) 2015, Free Software Foundation, Inc.

Gnuastro is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation, either version 3 of the License, or (at your
option) any later version.

Gnuastro is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
General Public License for more details.

You should have received a copy of the GNU General Public License
along with Gnuastro. If not, see <http://www.gnu.org/licenses/>.
**********************************************************************/
#ifndef __GAL_THREADS_H__
#define __GAL_THREADS_H__

/* Include other headers if necessary here. Note that other header files
   must be included before the C++ preparations below */
#include <pthread.h>
#include <gnuastro/blank.h>

/* When we are within Gnuastro's building process, `IN_GNUASTRO_BUILD' is
   defined. In the build process, installation information (in particular
   `GAL_CONFIG_HAVE_PTHREAD_BARRIER' that we need below) is kept in
   `config.h'. When building a user's programs, this information is kept in
   `gnuastro/config.h'. Note that all `.c' files must start with the
   inclusion of `config.h' and that `gnuastro/config.h' is only created at
   installation time (not present during the building of Gnuastro).*/
#ifndef IN_GNUASTRO_BUILD
#include <gnuastro/config.h>
#endif

/* C++ Preparations */
#undef __BEGIN_C_DECLS
#undef __END_C_DECLS
#ifdef __cplusplus
# define __BEGIN_C_DECLS extern "C" {
# define __END_C_DECLS }
#else
# define __BEGIN_C_DECLS                /* empty */
# define __END_C_DECLS                  /* empty */
#endif
/* End of C++ preparations */



/* Actual header contants (the above were for the Pre-processor). */
__BEGIN_C_DECLS  /* From C++ preparations */





/*****************************************************************/
/*********    Implementation of pthread_barrier    ***************/
/*****************************************************************/
#if GAL_CONFIG_HAVE_PTHREAD_BARRIER == 0

/* Integer number of nano-seconds that `pthread_barrier_destroy' should
   wait for a check to see if all barriers have been reached. */
#define GAL_THREADS_BARRIER_DESTROY_NANOSECS 1000

typedef int pthread_barrierattr_t;

typedef struct
{
  pthread_mutex_t mutex;
  pthread_cond_t   cond;
  size_t          count;
  size_t          limit;
  size_t   condfinished;
} pthread_barrier_t;

int
pthread_barrier_init(pthread_barrier_t *b, pthread_barrierattr_t *attr,
                     unsigned int limit);

int
pthread_barrier_wait(pthread_barrier_t *b);

int
pthread_barrier_destroy(pthread_barrier_t *b);

#endif  /* GAL_CONFIG_HAVE_PTHREAD_BARRIER == 0 */





/*******************************************************************/
/************              Thread utilities           **************/
/*******************************************************************/
size_t
gal_threads_number();

void
gal_threads_dist_in_threads(size_t numactions, size_t numthreads,
                            size_t **outthrds, size_t *outthrdcols);

void
gal_threads_attr_barrier_init(pthread_attr_t *attr, pthread_barrier_t *b,
                              size_t limit);




/*******************************************************************/
/************     Run a function on multiple threads  **************/
/*******************************************************************/
struct gal_threads_params
{
  size_t            id; /* Id of this thread.                            */
  void         *params; /* Input structure for higher-level settings.    */
  size_t       *indexs; /* Indexes of actions to be done in this thread. */
  pthread_barrier_t *b; /* Pointer the barrier for all threads.          */
};

void
gal_threads_spin_off(void *(*worker)(void *), void *caller_params,
                     size_t numactions, size_t numthreads);


__END_C_DECLS    /* From C++ preparations */

#endif           /* __GAL_THREADS_H__ */