【发布时间】:2021-08-13 03:41:34
【问题描述】:
要进入if,我需要达到“t”变量中的值。有什么办法可以做到吗?
int main(int argc , char* argv[]){
sem_t t;
sem_init(&t, 0 /*#ofP*/, 1/*Semaphore start value*/);
if(t > 0){
printf("Hello");
}
return 0;
}
【问题讨论】:
-
你必须使用
sem_wait() -
我现在使用过,但这与我认为的无关,因为我得到与“二进制操作数无效>(具有'sem_t'{aka'union
'}和'int ')" -
你根本不应该使用
if (t > 0)。你应该改用sem_wait()。 -
如果您这样做是因为您想检查是否可以锁定信号量,请注意 any check-then-do 逻辑是TOCTOU bug。仅仅因为您检查您可以锁定一个信号量并且结果是“是”,这并不意味着当您真正尝试锁定它时您可以实际锁定该信号量。对于信号量,that's what
sem_trywait()is for.
标签: c linux pthreads semaphore