참조 설정 대 출퇴근 대 변경
Clojure에서 ref 값을 설정하는 3 가지 방법의 차이점은 무엇입니까? ref-set, commute 및 alter에 대한 문서를 여러 번 읽었습니다. 나는 어떤 시간에 어떤 것을 사용 해야하는지 다소 혼란 스럽습니다. 누군가 차이점이 무엇이며 왜 각각이 필요한지에 대한 간단한 설명을 제공 할 수 있습니까?
소프트웨어 트랜잭션 메모리 시스템이 클로저에서 작동하는 방법에 대한 매우 간단한 설명입니다. 값을 변경하지 않고 모두가 통과 할 때까지 트랜잭션을 재 시도합니다. 트랜잭션간에 안전한 상호 작용에 대한 힌트를 제공하는 ref-changing-functions를 사용하여 이러한 결정을 내리는 데 도움을 줄 수 있습니다.
ref-set
현재 값에 신경 쓰지 않는 경우입니다. 이것으로 설정하십시오 ! my-ref의 값을 4로 설정하는ref-set
것과 같은 것을 작성하는 것에 대한 걱정을 덜어줍니다(alter my-ref (fun [_] 4))
.(ref-set my-ref 4)
확실히 훨씬 더 좋아 보입니다. :).
사용은ref-set
단순히 값을 설정합니다.alter
가장 일반적인 표준입니다. 이 기능을 사용하여 값을 변경하십시오. 이것은 STM의 고기입니다. 전달한 함수를 사용하여 값을 변경하고 트랜잭션 시작부터 값이 변경되지 않았 음을 보장 할 수없는 경우 재 시도합니다. 이것은 심지어 당신이 할 필요가없는 경우에, 매우 안전 이 카운터를 증가처럼 안전합니다. 대부분의 시간 을 사용하고 싶을 것입니다alter
.commute
사물의 순서가 정말로 중요하지 않은시기에 최적화 된 alter 버전입니다. 누가 어떤 +1을 카운터에 추가했는지는 차이가 없습니다. 결과는 동일합니다. STM이 트랜잭션이 커밋해도 안전한지 결정하고 통근 작업에만 충돌이 있고 변경 작업에는 충돌이없는 경우 아무에게도 다시 시작할 필요없이 계속 진행하여 새 값을 커밋 할 수 있습니다. 이것은 정상적인 코드에서 큰 이득 을 보지 못할지라도 가끔 트랜잭션 재 시도를 절약 할 수 있습니다 .
가능할commute
때 사용하십시오 .
참조 URL : https://stackoverflow.com/questions/4999281/ref-set-vs-commute-vs-alter
'programing' 카테고리의 다른 글
MySQL "주요 효율성"이란? (0) | 2021.01.14 |
---|---|
두 개의 출력 목록 (즉, 목록의 분할)을 얻는 filter ()와 동등한 파이썬 (0) | 2021.01.14 |
R에서 x 축 눈금으로 플로팅 할 실제 x 축 값을 지정하는 방법 (0) | 2021.01.14 |
두 변수에 동일한 참조가 있는지 확인하는 방법은 무엇입니까? (0) | 2021.01.14 |
파이썬에서 + (pos) 단항 연산자의 목적은 무엇입니까? (0) | 2021.01.14 |