订购两个线程的执行

时间:2014-08-09 17:58:27

标签: c linux multithreading debian

我想编写两个线程,首先从控制台读取一个字符串,第二个将输出其中的字符数。

为此,我必须设置执行线程的顺序,首先读取,然后写入第二个。

此外,我想要一个线程在当时执行。

我该怎么做?

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

void *printCharacterNumber(void *ptr);
void *readMessage(void *ptr);

int main()
{
   pthread_t thread1, thread2;
   int iret1, iret2;

   iret1 = pthread_create(&thread1, NULL, printMessage, NULL);
   iret2 = pthread_create(&thread2, NULL, printCharacterNumber, NULL);

   pthread_join(thread1, NULL);
   pthread_join(thread2, NULL);

   return 0;
}

void *readMessage(void *ptr)
{
   char *message;
   fscan("%s", &message);
}

void *printCharacterNumber(void *ptr)
{
   printf("%s", message); // I'll add counting when it will work
}

1 个答案:

答案 0 :(得分:1)

genine(pthread)线程最大的兴趣是启用并行执行(利用大多数笔记本电脑和台式机拥有的几个核心)... 阅读一些pthread tutorial ...

您可能想要使用障碍。详细了解pthread_barrier_wait&amp; pthread_barrier_init

如果你想序列化一些计数器,你可以使用(最近的C11编译器,例如GCC 4.9)一些atomic builtins,或更多通常是mutex,请参阅{{3} }&amp; pthread_mutex_init等......:

 static pthread_mutex_t mtx = PTHREAD_MUTEX_INIT;

 static long counter;

 void increment_serialized_counter (void) {
     pthread_mutex_lock(&mtx);
     counter++;
     pthread_mutex_unclock(&mtx);
 }

 long get_serialized_counter (void) {
    long r = 0;
    pthread_mutex_lock(&mtx);
    r = counter;
    pthread_mutex_unclock(&mtx);
    return r;
 }

您可能应该为message变量使用互斥锁,如果它是静态的!