Objet objet intégré

ObjetSémaphore

objet sémaphore fibre

L'objet sémaphore gère un compteur interne, qui est décrémenté de un après l'appel de acquire ou wait, et incrémenté de un après l'appel de release ou post. Le compteur ne diminuera pas jusqu'à un nombre négatif, car lors de l'acquisition et de l'attente, la valeur est 0, ils mettront en veille la fibre actuelle jusqu'à ce que d'autres fibres augmentent la valeur du compteur via la libération ou la publication.

Les sémaphores sont couramment utilisés pour limiter l'utilisation simultanée des ressources et l'application du modèle producteur/consommateur.

Prenons l'exemple des requêtes de base de données pour limiter l'utilisation simultanée des ressources :

1 2 3 4 5 6 7 8 9 10
var maxconnections = 5; var l = new coroutine.Semaphore(maxconnections); ...... l.acquire(); var conn = connectdb() ..... conn.close(); l.release();

Le modèle producteur/consommateur utilise généralement des sémaphores avec des files d'attente. Le producteur ajoute des données à la file d'attente et publie un signal. Le consommateur attend d'abord le signal, obtient le signal, puis se rend dans la file d'attente pour interroger les données.

relation d'héritage

Constructeur

Semaphore

constructeur de sémaphore

1
new Semaphore(Integer value = 1);

Paramètres d'appel :

  • value: Entier, valeur initiale du compteur

fonction membre

wait

attendre un sémaphore

1
Boolean Semaphore.wait(Integer timeout = -1);

Paramètres d'appel :

  • timeout: Nombre entier,spécifie le délai d'expiration en millisecondes. La valeur par défaut est -1, ce qui signifie qu'il n'expirera jamais.

Résultats de retour :

  • Boolean, renvoie true si l'acquisition réussit, renvoie false si le délai expire.

post

Libérez un sémaphore, équivalent à release()

1
Semaphore.post();

trywait

Essayez d'acquérir un signal. S'il ne peut pas être acquis, il reviendra immédiatement et renverra false, ce qui équivaut à acquérir(false)

1
Boolean Semaphore.trywait();

Résultats de retour :

  • Boolean, renvoie true si l'acquisition réussit, renvoie false si le délai expire.

acquire

Devenez propriétaire de la serrure

1
Boolean Semaphore.acquire(Boolean blocking = true);

Paramètres d'appel :

  • blocking: Booléen, spécifie s'il faut attendre, attendre quand vrai, la valeur par défaut est vrai

Résultats de retour :

  • Boolean, indique si le verrou a été acquis avec succès, true indique une acquisition réussie.

La méthode d'acquisition est utilisée pour obtenir la propriété du verrou. Lorsque le verrou est dans l'état acquérable, cette méthode renvoie immédiatement true.

Lorsque le verrou ne peut pas être acquis et que le blocage est vrai, la fibre actuelle se met en veille. Lorsque d'autres fibres libèrent le verrou, cette méthode renvoie vrai.

Lorsque le verrou ne peut pas être acquis et que le blocage est faux, la méthode renvoie faux.


release

Libérer la propriété de la serrure

1
Semaphore.release();

Cette méthode libérera la propriété du verrou ou générera une erreur si la fibre actuelle ne possède pas le verrou.


count

Interroger le nombre actuel de tâches en attente

1
Integer Semaphore.count();

Résultats de retour :

  • Integer, renvoie le nombre de tâches

toString

Renvoie la représentation sous forme de chaîne de l'objet. Généralement, "[Native Object]" est renvoyé. L'objet peut être réimplémenté en fonction de ses propres caractéristiques.

1
String Semaphore.toString();

Résultats de retour :

  • String, renvoie la représentation sous forme de chaîne de l'objet

toJSON

Renvoie une représentation au format JSON de l'objet, renvoyant généralement une collection de propriétés lisibles définies par l'objet.

1
Value Semaphore.toJSON(String key = "");

Paramètres d'appel :

  • key: Chaîne, non utilisée

Résultats de retour :

  • Value, renvoie une valeur contenant du JSON sérialisable