我遇到了这段代码的问题,这是我书中的基本代码,有助于了解线程的工作原理。它应该创建NTHREADS,它应该执行neg
函数然后返回与收到的参数相反的
#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>
#include <errno.h>
#include <string.h>
#define NTHREADS 2
void *neg (void * param);
int main(int argc, char * argv[]){
pthread_t threads[NTHREADS];
int arg [NTHREADS];
int err;
long i;
for(i = 0; i< NTHREADS; i++){
arg[i] = i;
err= pthread_create(&(threads[i]), NULL, &neg, (void *) &(arg[i]));
if(err =! 0){
error(err,"pthread_create");
}
}
int j;
for (j = 0; j < NTHREADS; j++){
int *r;
err= pthread_join(threads[j], (void **) &r);
printf("Resultat [%d] = %d \n", j, *r);
free(r);
if(err!=0){
error(err,"pthread_join");
}
}
return(EXIT_SUCCESS);
}
void *neg (void * param){
int *l;
l= (int *) param;
int *r= (int *) malloc(sizeof(int));
*r = -*l;
return ((void *) r);
}
编译时我收到此消息:
nico@nico-G56JR:~/Desktop$ gcc -pthread Threads.c
nico@nico-G56JR:~/Desktop$ ./a.out
./a.out: c: Unknown error 4196644
我无法找到错误,有人可以帮助我吗?
提前致谢
答案 0 :(得分:3)
这个
if(err =! 0){
应该是
if(err != 0){
真的有点运气,因为错误=! 0实际上是编译,为err指定一个非零值,然后进入错误情况,将错误函数传递给对你的代码没有意义的错误函数。