使用线程时出现未知错误

时间:2014-08-13 13:05:11

标签: c multithreading ubuntu pthreads

我遇到了这段代码的问题,这是我书中的基本代码,有助于了解线程的工作原理。它应该创建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

我无法找到错误,有人可以帮助我吗?

提前致谢

1 个答案:

答案 0 :(得分:3)

这个

 if(err =! 0){

应该是

 if(err != 0){

真的有点运气,因为错误=! 0实际上是编译,为err指定一个非零值,然后进入错误情况,将错误函数传递给对你的代码没有意义的错误函数。