>백엔드 개발 >Golang >방송하기 전에 잠금을 해제해야 하나요?

방송하기 전에 잠금을 해제해야 하나요?

王林
王林앞으로
2024-02-14 20:30:10650검색

방송하기 전에 잠금을 해제해야 하나요?

PHP 편집자 Xiaoxin은 모두에게 인기 있는 질문인 "방송하기 전에 잠금을 해제해야 합니까?"를 공개하기 위해 왔습니다. 이 질문에 대한 대답은 '예'입니다. 현대 TV 산업에서는 일반적으로 프로그램을 방송하기 전에 잠금 해제 작업이 필요합니다. 잠금해제를 하면 프로그램 신호의 안전한 전송이 보장되고, 무단 시청을 효과적으로 방지할 수 있기 때문입니다. 또한 잠금 해제는 저작권 및 프로그램 콘텐츠의 합법적인 권리와 이익을 보호하고 대다수 시청자에게 고품질 시청 경험을 제공할 수도 있습니다. 따라서 흥미로운 콘텐츠를 놓치지 않도록 프로그램을 시청하기 전에 잠금 해제 작업이 완료되었는지 확인하시기 바랍니다.

질문 내용

Go에서 조건 변수의 동작이 헷갈립니다.

메인 고루틴에서는 잠금을 획득하고 for 루프에서 Cond.Wait()를 호출하여 공유 메모리를 확인합니다. 작업 고루틴에서는 잠금을 획득하고 공유 메모리를 수정한 다음 브로드캐스트합니다.

다시 시작하면 Cond.Wait() 恢复时,它会在返回之前先尝试获取锁。但是, Cond.Broadcast()다시 시작하기 전에 잠금을 획득하려고 시도하는 것으로 나타났습니다. 그러나 Cond.Broadcast()는 잠금을 해제하지 않습니다. 그럼 방송하기 전에 제가 직접 잠금을 해제하지 않으면 교착상태가 발생하는 것 아닌가요?

sync.Cond를 사용하여 일부 코드를 읽었는데 필요하지 않다는 것을 알았지만 이유는 모르겠습니다. sync.Cond 阅读了一些代码,发现没有必要,但不知道为什么。

解决方法

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

해결 방법

공유 변수는 수정할 때 잠긴 상태로 유지되어야 합니다. 고루틴이 Wait를 호출하면 잠금이 해제되어 다른 고루틴이 이를 잠그고 공유 변수를 수정할 수 있습니다. Broadcast를 호출할 때 고루틴은 잠금을 보유할 수도 있고 보유하지 않을 수도 있습니다. 고루틴이 잠금을 보유하고 있으면 대기 중인 고루틴이 깨어나 잠금을 획득할 수 있을 때까지 기다립니다. 잠금을 해제하면 대기 중인 고루틴 중 하나가 잠금을 획득하고 계속할 수 있습니다. 🎜 🎜그렇습니다. 브로드캐스트 고루틴이 결국 잠금을 해제하는 한 교착 상태는 발생하지 않습니다. 🎜

위 내용은 방송하기 전에 잠금을 해제해야 하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제