22是ENVAL
错误代码,表示invlalid参数.确保你已经启动了互斥锁,或者在某些时候你已经将它整合到某个地方.
EINVAL
使用具有值PTHREAD_PRIO_PROTECT的协议属性创建互斥锁,并且调用线程的优先级高于互斥锁的当前优先级上限.
我不太明白这一点,但这可能意味着你需要改变线程的优先级.我不确定.也许其他人可以照亮它.
听起来您的程序中其他地方有线程问题或野点。尝试打印互斥指针的值。尝试使用另一个线程来简单地锁定互斥锁,然后将时间和锁定成功打印到日志文件,然后解锁互斥锁。我怀疑问题不在于你正在寻找的地方。
另外,正如其他人在这里所说的那样,您最好的选择是创建一个非常小的测试程序来演示问题并将其发布在这里。您很可能无法获得那个小程序来演示错误。然后慢慢地将所有原始代码添加到小程序中,直到错误返回。如果它返回,您现在就知道导致问题的原因。如果它没有返回,那么你就完了。