我用这种方法用“读者”创建了一个“信号量”类:
void semaforo::reader(sem_t x, sem_t y,sem_t z,sem_t rsem,sem_t wsem){
cout<<"----------------"<<endl;
cout<<"Leitor esta Lendo"<<endl;
sem_wait(&z);
sem_wait(&rsem);
sem_wait(&x);
int aux = readcountM(0);
if(aux ==1){
sem_wait(&wsem);
}
sem_post(&x);
sem_post(&rsem);
sem_post(&z);
prints(1);
sem_wait(&x);
aux = readcountN(aux);
if(aux == 0){
sem_post(&wsem);
}
sem_post(&x);
}
在我的main.cpp中,我创建了这些辅助变量,并按如下方式对我的类进行了实例化:
sem_t x,y,z,rsem,wsem;
pthread_t read[3],write[2];
thread *teste2 = new thread();
// the following line triggers the error
teste2->pthread_creation(&read[0],NULL,(void *)teste->reader(x, y, z, rsem, wsem),NULL);
有了这个,我收到以下错误:
空值不被忽略,因为它应该是
答案 0 :(得分:2)
您的方法&#34;读者&#34;返回无效 您将该无效返回值用作&#34; pthread_creation&#34;的参数。将void转换为指向虚空的指针(你似乎试过)并没有改变任何东西,更不用说它是徒劳的了。
如果返回void,则无法从方法返回的值中创建值 这就是错误/警告告诉你的。