在C中的线程之间传递消息

时间:2015-10-27 22:42:15

标签: c multithreading pthreads

我想从主进程向每个线程发送一条消息并打印出来(是的,在每个线程中)。我该怎么办?

我需要从主服务器向线程发送消息,然后在线程中打印并完成它。

我收到了这段代码:

#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 :(得分:0)

由于主线程和所有子线程使用相同的数据,

主线程在数据缓冲区中放置一条消息,并打印一次&#39;次。计数器和消息号码计数器。

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

注意:所有子线程都使用相同的互斥锁

可能需要将数据中的两个计数器标记为“易失性”&#39;所以子线程每次都会检索一个新的副本。

建议每个帖子在检查&#39;次之间有一定的延迟时间来打印&#39;计数器,所以cpu周期不会耗尽

为了最好的安全性,主线程还可以在更新消息和计数器时锁定互斥锁