Verrouillage des fichiers et contrôle de la concurrence : une compréhension approfondie de la fonction flock


introduire:

Dans un environnement multiprocessus ou multithread, un contrôle raisonnable est requis pour l'accès simultané aux ressources partagées afin d'éviter les courses de données et les incohérences. Dans le système Linux, flockl'opération de verrouillage de fichier peut être réalisée via la fonction, de manière à réaliser un contrôle de concurrence simple et efficace. Cet article donnera une introduction approfondie au flockprincipe des fonctions, à l'introduction des fonctions, à l'introduction des paramètres, aux méthodes d'utilisation et aux scénarios d'application courants.


principe:

flockLa fonction est une fonction d'appel système, qui utilise le mécanisme de verrouillage de fichier fourni par le système de fichiers sous-jacent pour réaliser les opérations de verrouillage et de déverrouillage sur les fichiers. Une fois le fichier verrouillé, les autres processus ne peuvent pas écrire ou lire le même fichier en même temps, garantissant ainsi l'exclusivité ou le partage du fichier. flockLa fonction offre quatre modes de fonctionnement : verrouillage partagé ( LOCK_SH), verrouillage exclusif ( LOCK_EX), déverrouillé ( LOCK_UN) et mode non bloquant ( LOCK_NB). En sélectionnant raisonnablement le mode de fonctionnement, les exigences de contrôle de la concurrence dans différents scénarios peuvent être satisfaites.


Présentation de la fonction :

flockUne fonction a le prototype suivant :

int flock(int fd, int operation);
  • Paramètres fd: Le descripteur de fichier du fichier à verrouiller ou à déverrouiller.
  • Paramètre operation: Spécifiez le type d'opération de verrouillage ou de déverrouillage. Peut prendre l'une des valeurs suivantes : LOCK_SH, LOCK_EX, LOCK_UN, LOCK_NB.

flockLa valeur de retour de la fonction est 0 en cas de réussite, -1 en cas d'échec et le code d'erreur correspondant est défini.


Présentation des paramètres :

  • LOCK_SH: Verrou partagé, permettant à plusieurs processus de lire le fichier, mais pas d'y écrire.
  • LOCK_EX: Verrouillage exclusif, un seul processus est autorisé à lire ou écrire dans le fichier, et les autres processus ne peuvent pas accéder au fichier.
  • LOCK_UN: Déverrouiller, libérer le verrou précédent sur le fichier, permettant à d'autres processus de lire et d'écrire dans le fichier.
  • LOCK_NB: mode non bloquant, si le fichier ne peut pas être verrouillé, le processus ne sera pas bloqué, mais reviendra immédiatement.

Instructions:

Ce qui suit présente une méthode d'utilisation de base pour illustrer flockl'application spécifique de la fonction :

#include <fcntl.h>
#include <unistd.h>

int main() {
    
    
    int fd = open("example.txt", O_RDWR);
    if (fd == -1) {
    
    
        perror("open");
        return -1;
    }

    if (flock(fd, LOCK_EX | LOCK_NB) == -1) {
    
    
        perror("flock");
        close(fd);
        return -1;
    }

    // 加锁成功,可以安全地对文件进行读取或写入操作

    flock(fd, LOCK_UN); // 解锁

    close(fd);
    return 0;
}

Dans cet exemple, nous ouvrons d'abord un fichier example.txt, puis utilisons flockla fonction pour essayer de prendre un verrou exclusif sur le fichier. Si le verrouillage échoue, un message d'erreur sera émis et renvoyé. Si le verrouillage réussit, vous pouvez effectuer des opérations de lecture ou d'écriture sur le fichier. Enfin, utilisez LOCK_UNle paramètre pour déverrouiller le fichier et fermer le fichier.


Scénario d'application :

flockLes fonctions sont largement utilisées dans les scénarios suivants dans un environnement multiprocessus ou multithread :

  1. Contrôle d'accès simultané à la base de données : lorsque plusieurs processus accèdent à la base de données en même temps, vous pouvez utiliser flockla fonction pour verrouiller le fichier de base de données afin de vous assurer qu'un seul processus peut modifier les données à la fois.
  2. Synchronisation du cache de fichiers : dans un système de cache de fichiers, plusieurs processus peuvent accéder au même fichier de cache en même temps. En utilisant flockla fonction, le fichier cache peut être verrouillé pour éviter l'incohérence des données.
  3. Contrôle d'écriture du fichier journal : Lorsque plusieurs processus écrivent dans les fichiers journaux en même temps, l'utilisation flockde la fonction de verrouillage exclusif peut garantir l'ordre et l'intégrité des enregistrements du journal.
  4. Synchronisation de la communication inter-processus : lorsque les processus communiquent via des fichiers partagés, vous pouvez utiliser flockla fonction pour verrouiller et déverrouiller les fichiers partagés afin d'obtenir une synchronisation inter-processus.

Résumer:

Grâce flockà la fonction, nous pouvons facilement verrouiller et déverrouiller des fichiers pour obtenir un contrôle de la concurrence simple et efficace. Cet article présente flockle principe, l'introduction de la fonction, l'introduction des paramètres, la méthode d'utilisation et les scénarios d'application courants de la fonction. Une utilisation raisonnable des flockfonctions peut garantir un accès sécurisé aux ressources partagées dans un environnement multi-processus ou multi-thread, en évitant les courses de données et les incohérences.

Ce qui précède est un exemple de blog, vous pouvez le modifier et le développer en fonction de vos besoins, et ajouter des exemples et des scénarios d'application plus spécifiques pour répondre à vos besoins. J'espère vous aider !

おすすめ

転載: blog.csdn.net/qq_37037348/article/details/131488590