<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><br></div><div>See kill safety paper.&nbsp;</div><div><br></div><br><div><div>On Aug 12, 2013, at 6:40 PM, Robby Findler wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite">Guys: the main thing to keep in mind when programming with CML is that you can jut build your own sync abstractions easily.&nbsp;<div><br></div><div>In this case you would have a separate thread that mediates all access to one of these channels and that makes it easy to get such concerns right.</div>
<div><br></div><div>Don't just rely on the built in abstractions tho!<span></span><br><br>On Monday, August 12, 2013, Hendrik Boom  wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On Mon, Aug 12, 2013 at 04:11:14PM -0400, Eli Barzilay wrote:<br>
&gt; An easy way to get around such things is to add a level of<br>
&gt; indirection: wrap the original channel in another one where you<br>
&gt; implement your own peeking.<br>
<br>
Once you peek, if you decde that's not what you want, might you want to<br>
let independent threads peek the same element and decie they do want<br>
it?<br>
<br>
There's got to be some kind of rejecting release if a peek holds the<br>
stream until accepted.<br>
<br>
-- hendrik<br>
<br>
&gt;<br>
&gt;<br>
&gt; 10 minutes ago, Jonathan Schuster wrote:<br>
&gt; &gt; I discussed this with Vincent and Asumu today in person. Here are<br>
&gt; &gt; some of the results of our conversation:<br>
&gt; &gt;<br>
&gt; &gt; What I really want is a function like<br>
&gt; &gt; "async-channel-non-empty-event" that returns an event that's ready<br>
&gt; &gt; for synchronization when async-channel-get would not block (but the<br>
&gt; &gt; event does not consume a message). The predicate<br>
&gt; &gt; async-channel-empty? could also be useful for similar reasons.<br>
&gt; &gt;<br>
&gt; &gt; The naive implementation of a peek event doesn't work because of the<br>
&gt; &gt; following use case: On some thread (call it thread 1), the thread<br>
&gt; &gt; syncs on a peek event and gets the peeked value. Thread 1 decides it<br>
&gt; &gt; likes the value and attempts to pull it from the channel. However,<br>
&gt; &gt; at the same time another thread (thread 2) pulls out that value, so<br>
&gt; &gt; thread 1 ends up with a different value, which it doesn't know how<br>
&gt; &gt; to process. That use case needs a more complicated API that handles<br>
&gt; &gt; more of the thread synchronization. My own work doesn't involve this<br>
&gt; &gt; use case, though.<br>
&gt; &gt;<br>
&gt; &gt; For now, I'm going to write something to act like a channel with a<br>
&gt; &gt; non-empty event, but do people think async-channel-non-empty and<br>
&gt; &gt; async-channel-get would be useful to have in Racket proper? If not,<br>
&gt; &gt; would there be interest in providing that functionality as a<br>
&gt; &gt; package?<br>
&gt;<br>
&gt; --<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ((lambda (x) (x x)) (lambda (x) (x x))) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Eli Barzilay:<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://barzilay.org/" target="_blank">http://barzilay.org/</a> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Maze is Life!<br>
&gt; ____________________<br>
&gt; &nbsp; Racket Users list:<br>
&gt; &nbsp; <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
____________________<br>
&nbsp; Racket Users list:<br>
&nbsp; <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
</blockquote></div>
____________________<br> &nbsp;Racket Users list:<br> &nbsp;<a href="http://lists.racket-lang.org/users">http://lists.racket-lang.org/users</a><br></blockquote></div><br></body></html>