C ++线程 - pthread_create,pthread_join

时间:2010-12-01 20:28:58

标签: c++ multithreading pthreads

你能告诉我这里做错了什么吗?我正在错误地实现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 个答案:

答案 0 :(得分:4)

如果您没有使用线程例程参数,只需传递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)不是thread synchronization的最佳方式:)

答案 1 :(得分:1)

传递NULL作为第四个参数,而不是void *(这只是它的类型)。

此外,线程函数的类型应为

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

返回void指针并获取void指针参数的函数。