pthread_mutex_lock返回无效参数

Boa*_*rdy 5 c debugging mutex pthreads

我正在研究一些C代码,并且遇到锁定互斥锁的问题.代码调用一个函数,这个函数锁定一个互斥锁,以确保文件指针不被覆盖,这适用于几个实例,可能是大约10-20个单独调用的函数被调用,但在下一次调用时,pthread_mutex_lock将返回22的结果.然后我将此结果放入strerror(); 并得到了无效的论点.

无效参数意味着什么,感谢您提供的任何帮助.

toz*_*zka 7

22是ENVAL错误代码,表示invlalid参数.确保你已经启动了互斥锁,或者在某些时候你已经将它整合到某个地方.

另外人的pthread_mutex_lock说:

EINVAL

使用具有值PTHREAD_PRIO_PROTECT的协议属性创建互斥锁,并且调用线程的优先级高于互斥锁的当前优先级上限.

我不太明白这一点,但这可能意味着你需要改变线程的优先级.我不确定.也许其他人可以照亮它.

  • 有没有办法找出如果互斥体已经unininitialised,此刻我打印内存地址,它始终返回相同的值,所以我没有得到认为它越来越unininitialised,它绝对初始化开始与作为前几个工作正常 (3认同)

vy3*_*y32 5

听起来您的程序中其他地方有线程问题或野点。尝试打印互斥指针的值。尝试使用另一个线程来简单地锁定互斥锁,然后将时间和锁定成功打印到日志文件,然后解锁互斥锁。我怀疑问题不在于你正在寻找的地方。

另外,正如其他人在这里所说的那样,您最好的选择是创建一个非常小的测试程序来演示问题并将其发布在这里。您很可能无法获得那个小程序来演示错误。然后慢慢地将所有原始代码添加到小程序中,直到错误返回。如果它返回,您现在就知道导致问题的原因。如果它没有返回,那么你就完了。