Потоки C ++ - pthread_create, pthread_join - PullRequest
       5

Потоки C ++ - pthread_create, pthread_join

2 голосов
/ 01 декабря 2010

Можете ли вы сказать мне, что я делаю здесь неправильно?Я неправильно использую pthread_create

int iret1 = pthread_create(&producer, NULL, produce, void*);

int iret2 = pthread_create(&consumer1, NULL, consume, void*);

#include <iostream>
#include <cstdlib>
#include <pthread.h>
#include <ctime>
#include <time.h>

#define EMPTY 0
#define FILLED 1
#define BUFFER_SIZE 20

using namespace std;

//prototypes
void produce();
void consume(int);

int buffer[BUFFER_SIZE];

int main()
{


    int iret1 = pthread_create(&producer, NULL, produce, NULL);

    //join the threads



    return 0;
}

Ответы [ 2 ]

4 голосов
/ 01 декабря 2010

Если вы не используете аргумент подпрограммы потока, просто передайте указатель NULL вместо void*:

pthread_create( &producer, NULL, produce, NULL );

Предполагается, что подпрограмма потока имеет тип void* ()( void* ).У тебя разные.Это должно быть что-то вроде:

/// My fancy producer thread routine
extern "C" void* produce( void* arg ) {

    // do your thing here

    return 0; // or something if you want the result in pthread_join
}

Кроме того, sleep(3) не самый лучший способ синхронизации потоков :)

1 голос
/ 01 декабря 2010

Передайте NULL в качестве четвертого параметра, а не void * (это только его тип).

Кроме того, тип функции потока должен быть

void * produce(void *)
{...}

Функции, возвращающие пустой указатель и принимающие параметр пустого указателя.

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