The easy way is the big atom approach. Put the entire structure in an atom and use swap! to make updates.
First, the function passed to swap! should be free of side-effects, as swap! may need to call it more than once in the case of a collision. Second, within the function passed to swap! is where you check to see if the resource is available. If it is, you take it. Otherwise not. Now as for suitability. Note that the function passed to swap! must return the replacement value of your immutable structure. So it important that your structure records who got the resource being requested. And it looks like your structure handles that. No need to use compare and set. The swap! function is good enough. It is really a convenience function layered over compare-and-set. Sometimes swap! is not powerful enough, which is when you use compare-and-set. On Monday, February 1, 2016 at 7:29:39 AM UTC-5, Jeremy Vuillermet wrote: > > Hello, > > I'm making a game where players can choose a box in a grid to discover > what's behind it. > > My data structure is an atom with {:grid-size 5, :picks {5 "player1}} > where 5 is the box position in the grid. > > How can I be sure that two players can't pick the same box. From my > understanding, checking the box and then swaping if the box is free is not > enough. > So I guessed I should use compare and set but I only understand how it > works with simple atom like (atom 1). > > 2 questions then : Is my data structure adapted for that ? > > How to compare and set only for a nested path like [:picks 5] ? > > Thanks > -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.