1*820c1a8dSHiroo HAYASHI /* Plain mutexes (native Windows implementation). 2*820c1a8dSHiroo HAYASHI Copyright (C) 2005-2021 Free Software Foundation, Inc. 3*820c1a8dSHiroo HAYASHI 4*820c1a8dSHiroo HAYASHI This file is free software: you can redistribute it and/or modify 5*820c1a8dSHiroo HAYASHI it under the terms of the GNU Lesser General Public License as 6*820c1a8dSHiroo HAYASHI published by the Free Software Foundation; either version 2.1 of the 7*820c1a8dSHiroo HAYASHI License, or (at your option) any later version. 8*820c1a8dSHiroo HAYASHI 9*820c1a8dSHiroo HAYASHI This file is distributed in the hope that it will be useful, 10*820c1a8dSHiroo HAYASHI but WITHOUT ANY WARRANTY; without even the implied warranty of 11*820c1a8dSHiroo HAYASHI MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12*820c1a8dSHiroo HAYASHI GNU Lesser General Public License for more details. 13*820c1a8dSHiroo HAYASHI 14*820c1a8dSHiroo HAYASHI You should have received a copy of the GNU Lesser General Public License 15*820c1a8dSHiroo HAYASHI along with this program. If not, see <https://www.gnu.org/licenses/>. */ 16*820c1a8dSHiroo HAYASHI 17*820c1a8dSHiroo HAYASHI /* Written by Bruno Haible <bruno@clisp.org>, 2005. 18*820c1a8dSHiroo HAYASHI Based on GCC's gthr-win32.h. */ 19*820c1a8dSHiroo HAYASHI 20*820c1a8dSHiroo HAYASHI #ifndef _WINDOWS_MUTEX_H 21*820c1a8dSHiroo HAYASHI #define _WINDOWS_MUTEX_H 22*820c1a8dSHiroo HAYASHI 23*820c1a8dSHiroo HAYASHI #define WIN32_LEAN_AND_MEAN /* avoid including junk */ 24*820c1a8dSHiroo HAYASHI #include <windows.h> 25*820c1a8dSHiroo HAYASHI 26*820c1a8dSHiroo HAYASHI #include "windows-initguard.h" 27*820c1a8dSHiroo HAYASHI 28*820c1a8dSHiroo HAYASHI typedef struct 29*820c1a8dSHiroo HAYASHI { 30*820c1a8dSHiroo HAYASHI glwthread_initguard_t guard; /* protects the initialization */ 31*820c1a8dSHiroo HAYASHI CRITICAL_SECTION lock; 32*820c1a8dSHiroo HAYASHI } 33*820c1a8dSHiroo HAYASHI glwthread_mutex_t; 34*820c1a8dSHiroo HAYASHI 35*820c1a8dSHiroo HAYASHI #define GLWTHREAD_MUTEX_INIT { GLWTHREAD_INITGUARD_INIT } 36*820c1a8dSHiroo HAYASHI 37*820c1a8dSHiroo HAYASHI #ifdef __cplusplus 38*820c1a8dSHiroo HAYASHI extern "C" { 39*820c1a8dSHiroo HAYASHI #endif 40*820c1a8dSHiroo HAYASHI 41*820c1a8dSHiroo HAYASHI extern void glwthread_mutex_init (glwthread_mutex_t *mutex); 42*820c1a8dSHiroo HAYASHI extern int glwthread_mutex_lock (glwthread_mutex_t *mutex); 43*820c1a8dSHiroo HAYASHI extern int glwthread_mutex_trylock (glwthread_mutex_t *mutex); 44*820c1a8dSHiroo HAYASHI extern int glwthread_mutex_unlock (glwthread_mutex_t *mutex); 45*820c1a8dSHiroo HAYASHI extern int glwthread_mutex_destroy (glwthread_mutex_t *mutex); 46*820c1a8dSHiroo HAYASHI 47*820c1a8dSHiroo HAYASHI #ifdef __cplusplus 48*820c1a8dSHiroo HAYASHI } 49*820c1a8dSHiroo HAYASHI #endif 50*820c1a8dSHiroo HAYASHI 51*820c1a8dSHiroo HAYASHI #endif /* _WINDOWS_MUTEX_H */ 52