Передача сообщения между потоками в C

Я хочу отправить сообщение из основного процесса в каждую ветку и распечатать его (да, в каждой ветке). Как мне это сделать?

Мне нужно отправить сообщение от мастера в ветку, затем распечатать его в ветке и закончить.

Я получил этот код:

#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>

void * thread1()
{
        while(1){
                printf("Hello!!\n");
        }
}

void * thread2()
{
        while(1){
                printf("How are you?\n");
        }
}

int main()
{
        int status;
        pthread_t tid1,tid2;

        pthread_create(&tid1,NULL,thread1,NULL);
        pthread_create(&tid2,NULL,thread2,NULL);
        pthread_join(tid1,NULL);
        pthread_join(tid2,NULL);
        return 0;
}

1 ответ

Поскольку основной поток и все дочерние потоки используют одни и те же данные,

основной поток помещает в данные сообщение в буфере вместе со счетчиком "время печати" и счетчиком номера сообщения.

0) Each sub thread is looping, watching that 'times to print' counter, 
when that counter becomes greater than 0,  then
checks if they have already output that message[number]
if they have NOT output that message then
1) save new message number
2) lock a mutex, 
3) prints the message, 
4) decrements the count of times that message to be printed, 
5) unlocks the mutex. 
branch back to 0)

0) The main thread is looping, waiting for the 'times to print' counter to reach 0. 


when it does reach 0, 
1) set the next message 
2) updates the 'times to print' counter,
3) increment the message number counter
if not all messages sent, then branch back to 0)

Конечно, подпотокам понадобится какое-то указание на то, что больше не будет сообщений, возможно, основным потоком, установив счетчик "время печати" на -1

Примечание: все подпотоки используют один и тот же мьютекс

Может потребоваться пометить два счетчика в данных как "изменчивые", чтобы подпотоки каждый раз получали свежую копию.

Предположим, что у каждой нити есть некоторая задержка между проверками счетчика "время печати", чтобы циклы процессора не зависали

Для большей безопасности основной поток также может блокировать мьютекс при обновлении сообщения и счетчиков.

Другие вопросы по тегам