我有一个将FFT计算为pthread线程的函数。由于我有两个不同的输入,我有两个具有相同FFT功能的线程。我使用互斥锁让线程访问共享变量没有问题。代码运行良好,但我的输出数组包含一些" nan"价值与适当的价值观。当我使用下面没有互斥的功能时,一切都很好。
int main(){
while (1) {
pthread_create(&thread[1],NULL,compute_FFT,&arguments[1]);
pthread_join(thread[1],Output[1]);
pthread_create(&thread[2],NULL,compute_FFT,&arguments[2]);
pthread_join(thread[2],Output[2]);
}
}
但是当我在线程函数本身中包含while(1)并使用互斥时,输出数组有" nan"值。
void *compute_FFT(void* arg){
struct arg_struct *data = (struct arg_struct *)arg;
while (1){
pthread_mutex_lock(&fft_mutex);
data->base = data->fft->in;
for(i=0;i<N;i++){
data->base[i].re = Queue[data->number][i]; data->base[i].im =0.0;
}
usleep(1);
gpu_fft_execute(data->fft);
data->base = data->fft->out;
for(i=0;i<N;i++){
FFT_out[data->number][i] = sqrt(((data->base[i].re)*(data->base[i].re))+((data->base[i].im)*(data->base[i].im)));
}
pthread_mutex_unlock(&fft_mutex);
}
}
正如您在第一张图片中看到的那样,输出数组不包含&#34; nan&#34;价值观,在第二个,它有&#34; nan&#34;价值以及适当的价值观。这些只是输出数组的一部分。它通常有1024个项目。