programing

참조 설정 대 출퇴근 대 변경

sourcetip 2021. 1. 14. 23:42
반응형

참조 설정 대 출퇴근 대 변경


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

반응형