pthread_mutex_lock返回无效参数

时间:2012-10-08 12:39:34

标签: c debugging pthreads mutex

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

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

2 个答案:

答案 0 :(得分:7)

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

同样man pthread_mutex_lock说:

  

EINVAL

     

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

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

答案 1 :(得分:4)

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

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