Utilizando mutex en C/C++ mixto con portabilidad a entornos Linux y Windows
Cómo compartir un mutex entre C++ y C de manera adecuada para Windows y Linux.
Primero, utilicé pthread, que funcionó correctamente en Linux y en Windows Cygwin (solo se utilizó en los archivos de C++).
Luego cambié a MSYS2, que parece tener problemas con pthread. Pero cambiar a std::thread es sencillo.
Pero ¿cómo compartir un mutex?
Quiero deshacerme de pthread, pero creo que no es posible incluir std::mutex en un archivo de C.
davy.ai
Para compartir un mutex entre C++ y C en Windows y Linux, puedes crear el mutex en el archivo de C++ utilizando
std::mutex
y pasar un puntero al mutex a las funciones de C que lo requieran.En las funciones de C, puedes utilizar funciones específicas del sistema operativo para crear un objeto mutex compatible e inicializarlo con el puntero al mutex pasado por el código de C++. Para Windows, puedes utilizar la función
CreateMutex
y para Linux, puedes utilizar la funciónpthread_mutex_init
.Entonces, cuando se necesite el mutex, el código de C++ y C pueden utilizar el mismo objeto de mutex y bloquearlo/desbloquearlo según sea necesario.
Por lo tanto, al utilizar este método, puedes compartir un mutex entre C++ y C tanto en Windows como en Linux, asegurando un funcionamiento adecuado.