2017-09-21 5 views
0

Plusieurs processus d'espace utilisateur pourraient accéder à cette valeur en même temps, donc je suppose que nous devrions utiliser des verrous ou des barrières de mémoire pour sécuriser mais je pourrais trouver beaucoup de code dans le pilote linux . Avons-nous vraiment besoin d'un mutex pour les cas de lecture et d'écriture?Ai-je besoin d'un mutex pour protéger une valeur int qui pourrait être obtenue/définie via sysfs?

+0

Utilisent SHM vous? (Segment de mémoire partagée) – rak007

+0

Pas vraiment. Mon cas est, par exemple, j'ai un registre rw "REG", et dans le pilote j'ai mis en cache sa valeur avec "int reg", puis je crée un fichier sysfs, disons, "/sys/.../reg". Lorsque l'utilisateur renvoie une valeur int à "/sys/.../reg", cette valeur sera écrite dans REG et mise en cache dans "int reg"; Lorsque le chat utilisateur "/sys/.../reg", le pilote donnera simplement "int reg" à l'utilisateur. Ma question est, ai-je besoin d'ajouter un mutex pour protéger "int reg" à la fois pour l'écho et le chat? –

+0

Si vous écrivez dans des fichiers avec plusieurs process/threads, peut-être que ce post pourrait vous aider: https://stackoverflow.com/questions/26565498/multiple-threads-writing-on-same-file – rak007

Répondre

0

La CPU et le système dépendent de l'exécution du code. En fait, vous pouvez le faire sans techniques de synchronisation si l'opération est atomique. Tant que vous n'êtes pas sûr de cela, il est préférable d'utiliser un objet de synchronisation. Pour les valeurs int/dword, la plupart du temps, les utilisateurs le font sans objet sych.

Lire cet article http://preshing.com/20130618/atomic-vs-non-atomic-operations/

et aussi un même problème Are C++ Reads and Writes of an int Atomic?

+0

Merci pour votre explication et vous liens :-) –