Cómo imprimir AB BA AB BA BA con semáforos si ya puedo imprimir el grupo AB? en C
Actualmente estoy utilizando multi-hilo y semáforos. Estoy utilizando semáforos y 2 hilos en C, tengo 2 funciones en las cuales imprimo A en el primer hilo y en la otra imprimo B. TOTAL es la variable que indica el número de repeticiones, que son 5 pares de letras.
Este programa puede imprimir AB AB AB AB secuencialmente.
#include <pthread.h>
#include <semaphore.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define TOTAL_SIZE 5
sem_t semaphore1;
sem_t semaphore2;
void printA(void *p)
{
int i;
for (i = 0; i < TOTAL_SIZE; i++)
{
sem_wait(&semaphore1);
printf("A");
fflush(NULL);
sem_post(&semaphore2);
}
pthread_exit(NULL);
}
void printB(void *p)
{
int i;
for (i = 0; i < TOTAL_SIZE; i++)
{
sem_wait(&semaphore2);
printf("B");
fflush(NULL);
sleep(random() % 2);
sem_post(&semaphore1);
}
pthread_exit(NULL);
}
int main(void)
{
pthread_t th1, th2;
sem_init(&semaphore1, 0, 1);
sem_init(&semaphore2, 0, 0);
if (pthread_create(&th1, NULL, (void *)printA, (void *)NULL) != 0)
{
printf("Error creating thread\n");
}
if (pthread_create(&th2, NULL, (void *)printB, (void *)NULL) != 0)
{
printf("Error creating thread\n");
}
pthread_join(th1, NULL);
pthread_join(th2, NULL);
sem_destroy(&semaphore1);
sem_destroy(&semaphore2);
return 0;
}
Esto produce la siguiente salida:
AB AB AB AB AB
Mi pregunta es, ¿cómo puedo obtener AB BA AB BA BA? El tamaño total es de 5 pares.</unistd.h></stdlib.h></stdio.h></semaphore.h></pthread.h>
davy.ai
Una forma de lograr AB BA AB BA BA utilizando el código existente y los semáforos es modificar la función printB para imprimir “BA” en lugar de “B” y cambiar el orden de los semáforos en la función de la siguiente manera:
Esto resultará en la siguiente salida:
Ten en cuenta que el orden en el que se crean y unen los hilos no afecta la salida. Sin embargo, la llamada a sleep en la función printB puede causar ligeras variaciones en el tiempo de salida.