Le verrouillage est spécifique à la plate-forme et au dispositif, mais en général, vous avez quelques options :
- Utilisez flock(), ou un équivalent (si votre système d'exploitation le supporte). C'est un verrouillage consultatif, à moins que vous ne vérifiiez le verrouillage, il est ignoré.
- Utilisez une méthodologie de verrouillage-copie-déplacement-déverrouillage, où vous copiez le fichier, écrivez les nouvelles données, puis le déplacez (déplacer, pas copier - déplacer est une opération atomique sous Linux - vérifiez votre système d'exploitation), et vous vérifiez l'existence du fichier verrouillé.
- Utiliser un répertoire comme "verrou". Ceci est nécessaire si vous écrivez sur NFS, puisque NFS ne supporte pas flock().
- Il est également possible d'utiliser la mémoire partagée entre les processus, mais je n'ai jamais essayé ; c'est très spécifique au système d'exploitation.
Pour toutes ces méthodes, vous devrez utiliser une technique de verrouillage par rotation (réessayer après un échec) pour acquérir et tester le verrouillage. Cela laisse une petite fenêtre pour une mauvaise synchronisation, mais elle est généralement assez petite pour ne pas être un problème majeur.
Si vous recherchez une solution multiplateforme, il est préférable de vous connecter à un autre système via un autre mécanisme (la meilleure solution suivante est la technique NFS ci-dessus).
Notez que sqlite est soumis aux mêmes contraintes sur NFS que les fichiers normaux, donc vous ne pouvez pas écrire dans une base de données sqlite sur un partage réseau et obtenir la synchronisation gratuitement.