Programa sencillo en C con pthreads – Pregunta de sincronización.
#include
#include
#include
#define NUM_THREADS 2
int count = 0;
pthread_mutex_t mutex;
void* increment_counter(void *thread_id) {
pthread_mutex_lock(&mutex);
count++;
printf(“Hilo %d incrementó el contador a %d\n”, *(int*)thread_id, count);
pthread_mutex_unlock(&mutex);
pthread_exit(NULL);
}
int main() {
pthread_t threads[NUM_THREADS];
int thread_ids[NUM_THREADS] = {1, 2};
pthread_mutex_init(&mutex, NULL);
for (int i = 0; i < NUM_THREADS; i++) {
int rc = pthread_create(&threads[i], NULL, increment_counter, (void*)&thread_ids[i]);
if (rc) {
printf("Error al crear el hilo %d\n", i+1);
exit(-1);
}
}
for (int i = 0; i < NUM_THREADS; i++) {
pthread_join(threads[i], NULL);
}
pthread_mutex_destroy(&mutex);
printf("El contador final es: %d\n", count);
pthread_exit(NULL);
}
Este programa sencillo en C utiliza pthreads para incrementar un contador de forma sincronizada. Se utiliza un mutex para asegurar que cada hilo accede al contador de manera exclusiva. Cada hilo incrementa el contador en uno y muestra el resultado por pantalla. Finalmente, se muestra el valor final del contador después de que todos los hilos hayan terminado.
Tengo este programa sencillo de C que utiliza pthreads.
Básicamente, quiero llamar a my_function()
una vez que esté 100% seguro de que my_thread()
se llama y se ejecuta.
Necesito saber cómo sincronizar la función main()
y la función my_thread()
.
Por favor, tenga en cuenta que my_thread()
nunca retorna.
#include <stdio.h>
#include <pthread.h>
void my_function(void);
void* my_thread(void* arg);
int main(int argc, char* argv[])
{
int rc;
pthread_t id;
rc = pthread_create(&id, NULL, my_thread, NULL);
if (rc != 0)
{
return -10;
}
/*
* Quiero llamar a my_function() una vez que esté 100% seguro de que my_thread() se llama y se ejecuta
*/
/*
* Código de sincronización a agregar aquí:
*/
my_function();
return 0;
}
void* my_thread(void* arg)
{
/*
* Este pthread nunca retorna
*/
while (1)
{
/* cosas */
};
}
void my_function(void)
{
printf("Hola\n");
}
Gracias por su ayuda.</pthread.h></stdio.h>
davy.ai
Para sincronizar la función
main()
y la funciónmy_thread()
, puedes utilizar un mecanismo de sincronización como un mutex o un semáforo. Aquí tienes un ejemplo utilizando un mutex:pthread_mutex_t
en la parte superior de tu código:my_thread()
:main()
después de llamar amy_function()
:my_function()
:Esto asegurará que
my_thread()
se ejecute y bloquee el mutex antes de quemy_function()
sea llamada desde la funciónmain()
. Aquí está el código modificado:“`c
#include <stdio.h>
#include <pthread.h>
void my_function (void);
void* my_thread (void* arg);
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
int main (int argc, char* argv[])
{
int rc;
pthread_t id;
}
void* my_thread (void* arg)
{
}
void my_function (void)
{
printf(“Hola\n”);
}
“`</pthread.h></stdio.h>