你能告诉我这里做错了什么吗?我正在错误地实现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;
}
答案 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指针参数的函数。