0

我的程序出现错误,该程序仍在进行中,该错误使我感到困惑。该程序是一个使用线程来加速计算可被四整除的平方根和的程序。我的代码如下。

#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: error: expected ']' before ';' 令牌,我不明白,因为预期的符号在那里。任何帮助是极大的赞赏。

4

3 回答 3

6
#define NUM_THREADS 3;

所以:

pthread_t ti[NUM_THREADS];

扩展为:

pthread_t ti[3;];

正如错误所说,应该]在之前;

于 2013-09-23T20:28:16.080 回答
4

你应该有

#define NUM_THREADS 3

代替

#define NUM_THREADS 3;

最后没有;

那是因为替换是在文本中完成的,所以thread_t ti[NUM_THREADS];会随着thread_t ti[3;];你得到错误而被扩展。

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

于 2013-09-23T20:27:55.253 回答
0

不要在#define语句的末尾加上分号。

它应该是

#define NUM_THREADS 3

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

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

双等号 ( ==) 用于测试一个值。
所以i == ((ARGV/4) + 1);将是真或假,取决于 i 的值。

通常,for 循环中的第一条语句会分配一个值,如下所示:

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

(除非您实际上是要测试i? 的值,原因尚不清楚)

于 2013-09-23T20:30:18.040 回答