(root)/
findutils-4.9.0/
gnulib-tests/
glthread/
yield.h
       1  /* Yielding the processor to other threads and processes.
       2     Copyright (C) 2005-2022 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 */