6

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

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

4

2 回答 2

8

22 是ENVAL错误代码,表示参数无效。确保你已经初始化了你的互斥锁,或者如果在某个时候你已经在某个地方单元化了它。

man pthread_mutex_lock还说:

EINVAL

互斥体是使用值为 PTHREAD_PRIO_PROTECT 的协议属性创建的,并且调用线程的优先级高于互斥体的当前优先级上限。

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

于 2012-10-08T13:02:45.653 回答
4

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

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

于 2012-10-08T12:43:05.407 回答