C中的线程问题

时间:2013-09-23 20:25:27

标签: c syntax-error

我从我的程序中收到错误,这仍然是一项正在进行中的工作,错误让我感到困惑。该程序是一个使用线程加速计算平方根之和的数字,该数字可被4整除。我的代码如下。

#include <pthread.h>
#include <stdio.h>
#include <math.h>
#include <unistd.h>
#define NUM_THREADS 3;
int ARGV;
pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER;
int total;


void *calc(int t){
int ttl;
int i;
if (t == 0) {
    for (i == ((ARGV / 4) + 1); i < (ARGV / 2); i++){
        ttl = ttl + sqrt(i);
    }
} else if (t == 1) {
    for (i == ((ARGV / 2) + 1); i < ((3 * ARGV) / 4); i++){
        ttl = ttl + sqrt(i);
    }
} else if (t == 2) {
    for (i == (((3 * ARGV) + 1) / 4); i < ARGV; i++){
        ttl = ttl + sqrt(i);
    }
}
pthread_mutex_lock(&m);
total = total + ttl;
pthread_mutex_unlock;
}

int main(int argc, char* argv[]) {
    int i;
    int ttl;
    ARGV =  atoi(argv[1]);

    pthread_t ti[NUM_THREADS];

    for (i = 0; i < NUM_THREADS; i++) {
        pthread_create(&ti[i], NULL, calc, i);
    }
    for (i == 1; i < (ARGV / 4) ; i++){
            ttl = ttl + sqrt(i);
    }
    for (i = 0; i < NUM_THREADS; i++)   {
        pthread_join(&ti[i], NULL);
    }
    total = total + ttl;
}

我得到的错误是thr.c:37:错误:期望']'之前';'令牌,我不明白,因为预期的符号就在那里。非常感谢任何帮助。

3 个答案:

答案 0 :(得分:6)

#define NUM_THREADS 3;

所以:

pthread_t ti[NUM_THREADS];

扩展为:

pthread_t ti[3;];

]应该之前 ;,如错误所示。

答案 1 :(得分:4)

你应该

#define NUM_THREADS 3

而不是

#define NUM_THREADS 3;

最后没有;

这是因为替换是以文本方式完成的,因此thread_t ti[NUM_THREADS];会扩展为thread_t ti[3;];,从此处就会出现错误。

提示:当错误中涉及宏时,您可以使用-E进行编译,并查看扩展以进行调试。

答案 2 :(得分:0)

不要在你的#define陈述的末尾放置分号。

应该是

#define NUM_THREADS 3

你所有的for循环看起来都错了:

for (i == ((ARGV / 4) + 1); i < (ARGV / 2); i++)

双等号(==)用于测试值 因此,i == ((ARGV/4) + 1);将为真或假,具体取决于i的值。

通常,for-loop 中的第一个语句分配值,如:

for (i = ARGV/4 + 1; i < (ARGV / 2); i++)

(除非你的意思是测试i的价值?出于不清楚的原因)