我正在处理一些C代码,并且遇到锁定互斥锁的问题。代码调用一个函数,这个函数锁定一个互斥锁,以确保文件指针不被覆盖,这适用于几个实例,可能是大约10-20个单独调用的函数被调用,但在下一次调用时,pthread_mutex_lock将返回22的结果。然后我将此结果放入strerror();并得到了无效的论点。
无效参数意味着什么,感谢您提供的任何帮助。
答案 0 :(得分:7)
22是ENVAL
错误代码,表示invlalid参数。确保你已经启动了互斥锁,或者在某些时候你已经将它整合到某个地方。
EINVAL
使用具有的协议属性创建互斥锁 值PTHREAD_PRIO_PROTECT,调用线程的优先级更高 比互斥锁当前的优先级上限。
我不太明白这一点,但这可能意味着您需要更改线程的优先级。我不确定。也许其他人可以照亮它。
答案 1 :(得分:4)
听起来你的程序中的其他地方存在线程问题或狂野点 。尝试打印互斥锁指针的值。尝试使用另一个只是锁定互斥锁的线程,然后将时间和锁定成功打印到日志文件,然后解锁互斥锁。我怀疑问题不在你看的地方。
另外,正如其他人在这里所说的,最好的办法是创建一个非常小的测试程序来演示问题并在此处发布。您可能无法获得该小程序来演示错误。然后慢慢将所有原始代码添加到小程序中,直到错误返回。如果它返回,您现在知道导致问题的原因。如果它没有返回,你就完成了。