Pthreads не работает - PullRequest
       21

Pthreads не работает

1 голос
/ 07 февраля 2012

Я написал некоторый код, но, кажется, он не работает, когда я его компилирую. Я пытаюсь запустить это в Ubuntu:

#include <pthread.h>
#include <ctype.h>
#include <unistd.h>

char buffer[128];

void *write_thread(void *args)
{
    int count = *((int*)args);
    write(STDOUT_FILENO, buffer, count);

    pthread_exit(0);
}

void *toupper_thread(void *args)
{
    int i;
    int count = *((int*)args);
    for(i = 0; i < count; i++) {
        buffer[i] = toupper(buffer[i]);
    }

    pthread_t writeId;
    pthread_create(&writeId, NULL, write_thread, &count);

    pthread_join(writeId, NULL);
    pthread_exit(0);
}

void *read_thread(void *args)
{
    int count = read(STDIN_FILENO, buffer, 128);
    pthread_t toupperId;
    pthread_create(&toupperId, NULL, toupper_thread, &count);

    pthread_join(toupperId, NULL);
    //buffer[count] = 0;

    pthread_exit(0);

}

int main()
{
    pthread_t threadId;
    pthread_create(&threadId, NULL, read_thread, NULL);

    pthread_join(threadId, NULL);
}

и я получаю эти ошибки, когда пытаюсь скомпилировать его с gcc -pthread prob41.c или с gcc prob41.c -lpthread:

   prob41.c:1:21: error: pthread.h: No such file or directory
   prob41.c: In function ‘toupper_thread’:
   prob41.c:23: error: ‘pthread_t’ undeclared (first use in this function)
   prob41.c:23: error: (Each undeclared identifier is reported only once
   prob41.c:23: error: for each function it appears in.)
   prob41.c:23: error: expected ‘;’ before ‘writeId’
   prob41.c:24: error: ‘writeId’ undeclared (first use in this function)
   prob41.c: In function ‘read_thread’:
   prob41.c:33: error: ‘pthread_t’ undeclared (first use in this function)
   prob41.c:33: error: expected ‘;’ before ‘toupperId’
   prob41.c:34: error: ‘toupperId’ undeclared (first use in this function)
   prob41.c: In function ‘main’:
   prob41.c:45: error: ‘pthread_t’ undeclared (first use in this function)
   prob41.c:45: error: expected ‘;’ before ‘threadId’
   prob41.c:46: error: ‘threadId’ undeclared (first use in this function)

Я не знаю, что я делаю неправильно.

Ответы [ 3 ]

3 голосов
/ 07 февраля 2012

Похоже, вы пропустили некоторые зависимости.

Попробуйте это:

$ sudo apt-get install -y libc6-dev
1 голос
/ 13 декабря 2016
  • У вас нет библиотеки pthread.h в системе. Попробуйте установить подходящая библиотека для него.
  • Вы должны обязательно использовать #include <sys/type.h>
  • Не забудьте добавить -lpthread во время компиляции: gcc -lpthread {x}.c -o {y}
1 голос
/ 07 февраля 2012

Необходимо добавить флаг -I в команду компиляции, чтобы компилятор мог найти pthread.h

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...