pthread_mutex_lock retourne un argument invalide

Je travaille sur du code C et je ne parviens pas à verrouiller un mutex. Le code fait un appel à une fonction et cette fonction verrouille un mutex pour s’assurer qu’un pointeur de fichier n’est pas écrasé. Cela fonctionne correctement pour plusieurs instances, probablement environ 10 à 20 appels distincts de la fonction appelée, mais lors du prochain appel. pthread_mutex_lock retournera avec un résultat de 22. J’ai ensuite mis ce résultat dans strerror (); et récupéré argument invalide.

Qu’est-ce qu’un argument invalide signifie, merci pour toute aide que vous pouvez fournir.

On dirait que vous avez un problème de threading ou un point sauvage quelque part dans votre programme . Essayez d’imprimer la valeur du pointeur mutex. Essayez d’avoir un autre thread qui verrouille simplement le mutex puis imprime dans un fichier journal l’heure et que le locking a réussi, puis déverrouille le mutex. Je soupçonne que le problème n’est pas où vous regardez.

En outre, comme d’autres l’ont dit ici, votre meilleur pari est de créer un très petit programme de test qui montre le problème et de le poster ici. Les chances sont que vous ne serez pas en mesure d’obtenir ce petit programme pour démontrer l’erreur. Ajoutez ensuite lentement tout votre code d’origine dans le petit programme jusqu’à ce que l’erreur se reproduise. Si cela revient, vous savez maintenant quelle est la cause du problème. Si cela ne revient pas, vous avez terminé.

22 est le code d’erreur ENVAL qui signifie un argument invlalid. Assurez-vous que vous avez initié votre mutex, ou si à un moment donné vous l’avez unifié quelque part.

Aussi l’ homme pthread_mutex_lock dit:

EINVAL

Le mutex a été créé avec l’atsortingbut de protocole ayant la valeur PTHREAD_PRIO_PROTECT et la priorité du thread appelant est supérieure au plafond de priorités actuel du mutex.

Je ne comprends pas bien cela, mais cela signifie probablement que vous devez changer la priorité du fil. Je ne suis pas sûr. Peut-être que quelqu’un d’autre peut éclairer la lumière.