root/maint/gnulib/lib/glthread/yield.h

/* [previous][next][first][last][top][bottom][index][help] */

INCLUDED FROM


   1 /* Yielding the processor to other threads and processes.
   2    Copyright (C) 2005-2021 Free Software Foundation, Inc.
   3 
   4    This file is free software: you can redistribute it and/or modify
   5    it under the terms of the GNU Lesser General Public License as
   6    published by the Free Software Foundation; either version 2.1 of the
   7    License, or (at your option) any later version.
   8 
   9    This file is distributed in the hope that it will be useful,
  10    but WITHOUT ANY WARRANTY; without even the implied warranty of
  11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12    GNU Lesser General Public License for more details.
  13 
  14    You should have received a copy of the GNU Lesser General Public License
  15    along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
  16 
  17 /* This file contains a primitive for yielding the processor to other threads.
  18      extern void gl_thread_yield (void);
  19  */
  20 
  21 #ifndef _GLTHREAD_YIELD_H
  22 #define _GLTHREAD_YIELD_H
  23 
  24 #include <errno.h>
  25 
  26 /* ========================================================================= */
  27 
  28 #if USE_ISOC_THREADS || USE_ISOC_AND_POSIX_THREADS
  29 
  30 /* Use the ISO C threads library.  */
  31 
  32 # include <threads.h>
  33 
  34 # ifdef __cplusplus
  35 extern "C" {
  36 # endif
  37 
  38 # define gl_thread_yield() \
  39     thrd_yield ()
  40 
  41 # ifdef __cplusplus
  42 }
  43 # endif
  44 
  45 #endif
  46 
  47 /* ========================================================================= */
  48 
  49 #if USE_POSIX_THREADS
  50 
  51 /* Use the POSIX threads library.  */
  52 
  53 # include <sched.h>
  54 
  55 # ifdef __cplusplus
  56 extern "C" {
  57 # endif
  58 
  59 # define gl_thread_yield() \
  60     sched_yield ()
  61 
  62 # ifdef __cplusplus
  63 }
  64 # endif
  65 
  66 #endif
  67 
  68 /* ========================================================================= */
  69 
  70 #if USE_WINDOWS_THREADS
  71 
  72 # define WIN32_LEAN_AND_MEAN  /* avoid including junk */
  73 # include <windows.h>
  74 
  75 # ifdef __cplusplus
  76 extern "C" {
  77 # endif
  78 
  79 # define gl_thread_yield() \
  80     Sleep (0)
  81 
  82 # ifdef __cplusplus
  83 }
  84 # endif
  85 
  86 #endif
  87 
  88 /* ========================================================================= */
  89 
  90 #if !(USE_ISOC_THREADS || USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS || USE_WINDOWS_THREADS)
  91 
  92 /* Provide dummy implementation if threads are not supported.  */
  93 
  94 # define gl_thread_yield() 0
  95 
  96 #endif
  97 
  98 /* ========================================================================= */
  99 
 100 #endif /* _GLTHREAD_YIELD_H */

/* [previous][next][first][last][top][bottom][index][help] */