Maison  >  Article  >  développement back-end  >  Dois-je le déverrouiller avant de diffuser ?

Dois-je le déverrouiller avant de diffuser ?

王林
王林avant
2024-02-14 20:30:10624parcourir

Dois-je le déverrouiller avant de diffuser ?

L'éditeur PHP Xiaoxin est là pour révéler une question populaire pour tout le monde : « Dois-je le déverrouiller avant de diffuser ? Pour cette question, la réponse est oui. Dans l’industrie télévisuelle moderne, des opérations de déverrouillage sont généralement nécessaires avant que les programmes puissent être diffusés. En effet, le déverrouillage garantit la transmission sécurisée des signaux du programme et empêche efficacement toute visualisation non autorisée. En outre, le déverrouillage peut également protéger les droits et intérêts légitimes en matière de droits d'auteur et de contenu de programme, et offrir une expérience visuelle de haute qualité à la majorité des téléspectateurs. Par conséquent, avant de regarder une émission, assurez-vous que l'opération de déverrouillage est terminée pour éviter de manquer un contenu passionnant.

Contenu de la question

Je suis confus quant au comportement des variables de condition dans Go.

Dans la goroutine principale, j'acquiers le verrou et j'appelle Cond.Wait() dans la boucle for pour vérifier la mémoire partagée. Dans la goroutine de travail, j'acquiers le verrou et modifie la mémoire partagée, puis diffuse.

J'ai remarqué que lorsque Cond.Wait() 恢复时,它会在返回之前先尝试获取锁。但是, Cond.Broadcast() reprend, il essaie d'acquérir le verrou avant de revenir. Cependant, Cond.Broadcast() ne libère pas le verrou. Donc, si je ne libère pas le verrou moi-même avant de diffuser, ne devrait-il pas y avoir une impasse ?

J'ai lu du code en utilisant sync.Cond et j'ai trouvé que ce n'était pas nécessaire, mais je ne sais pas pourquoi. sync.Cond 阅读了一些代码,发现没有必要,但不知道为什么。

解决方法

修改共享变量时必须保持锁定。当一个goroutine调用Wait时,锁被解锁,因此另一个goroutine可以锁定它并修改共享变量。当您调用 Broadcast

Solution

Les variables partagées doivent rester verrouillées lors de leur modification. Lorsqu'une goroutine appelle Wait, le verrou est déverrouillé afin qu'une autre goroutine puisse le verrouiller et modifier la variable partagée. La goroutine peut ou non détenir le verrou lorsque vous appelez Broadcast. Si le goroutine détient le verrou, les goroutines en attente seront réveillées et attendront jusqu'à ce qu'elles puissent acquérir le verrou. Lorsque vous déverrouillez, l'une des goroutines en attente peut acquérir le verrou et continuer. 🎜 🎜Donc non, tant que la goroutine de diffusion finit par libérer le verrou, il n'y aura pas de blocage. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer