Java에서는 원자 연산이나 다른 스레드 동기화 메커니즘을 사용하지 않으면 스레드의 공유 변수 값이 중단될 수 있습니다.
CPython에 GIL이 제공됩니다. Lock inc의 값은 다음과 같습니다.
혼란스러운 a += 1
관용구에서도 값을 할당하기 전에 수행되는 여러 단계가 있습니다. 경쟁 조건을 방지합니다.
하지만 a = 1
같은 경우에는 자물쇠가 없습니다. 스레드가 a를 업데이트한 후 스레드 A와 B가 서로 다른 a 값을 읽도록 할 수 있습니까?
이 질문을 하는 또 다른 방법은 Lock이 공유 가치 전파를 보장하는 반면 Lock이 없으면 그렇지 않습니까?입니다.
문제는 a = 1
。如果您在整个代码中所做的唯一一件事是将 a
이 아닙니다. 전체 코드에서 수행하는 유일한 작업이 a
를 다양한 값으로 설정하는 것이라면 잠금이 필요하지 않습니다.
그러나 코드의 다른 곳에서 a = a + 1
을 수행하는 동안 a = 1
的同时,代码中的其他地方正在执行 a = a + 1
,那么您需要锁定它们。您锁定了 a = 1
,这样如果其他人递增 a
,它将完全在您设置 a
을 설정하는 경우 이를 잠가야 합니다. 다른 사람이 a
를 증가시키는 경우 정확히 a
를 설정하기 전이나 후에 발생하도록
따라서 거의 모든 경우에 자신이 무엇을 하고 있는지 잘 알지 않는 한 자물쇠가 가장 간단한 해결책입니다. 🎜
위 내용은 공유 변수 및 thread.Lock의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!