потоки posix (pthread_create и pthread_join) - PullRequest
0 голосов
/ 24 июня 2011

Я пытаюсь выучить Unix C и делаю упражнения для практики.Текущая проблема, над которой я работаю, связана с потоками POSIX (главным образом, pthread_create () и pthread_join ())

. В этой задаче многократно печатается «Hello World» с использованием двух потоков.Одна нить печатает «Hello» 1000 раз, а вторая - «World» 1000 раз.Основная программа / поток состоит в том, чтобы дождаться завершения двух потоков, прежде чем продолжить.

Вот то, что у меня есть сейчас.

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

void *print_hello(void *arg)
{
  int iCount;
  for(iCount = 0; iCount < 1000; iCount++)
  {
     printf("Hello\n");
  }
}

void *print_world(void *arg)
{
   int iCount;
   for(iCount = 0; iCount < 1000; iCount++)
   {
      printf("World\n");
   }
}

int main(void)
{
  /* int status; */
  pthread_t thread1;
  pthread_t thread2;

  pthread_create(&thread1, NULL, print_hello, (void*)0);
  pthread_create(&thread2, NULL, print_world, (void*)0);

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

  return 0;
}

Это, кажется, не работает полностью.Он печатает «Привет», как и ожидалось.Но «Мир» вообще не печатается.Похоже, второй поток не работает вообще.Не уверен, что я правильно использую pthread_join.Мое намерение состоит в том, чтобы основной поток «ожидал» этих двух потоков, как требует упражнение.

Буду признателен за любую помощь.

Ответы [ 2 ]

7 голосов
/ 24 июня 2011

Что заставляет вас думать, что не работают оба потока?Я думаю, что вывод слишком быстро проникает мимо вас, чтобы заметить - вы получите большое количество выходных данных каждого потока в одном блоке.

Попробуйте перенаправить вывод в файл и проанализировать, что на самом делеполучил печать.

2 голосов
/ 24 июня 2011

Я только что запустил ваш код.

$ gcc ./foo.c -pthread
$ ./a.out | grep World | wc -l
1000
$ ./a.out | grep Hello | wc -l
1000

У меня работает на Ubuntu 10.10 с gcc-4.5.2.Дважды проверьте вашу компиляцию и ваш вывод.

...