I've made the scheduler a bit more inteligent and the channel
implementation is now backed by a lock free queue.
https://github.com/rjmcguire/goport/blob/tip/wrapper2.d for a example using
libev

https://github.com/rjmcguire/goport/blob/tip/goroutine.d for the "go"
routines

https://github.com/rjmcguire/goport/blob/tip/channel.d channel
implementation, the channel still has a read lock because I didn't like
looping wasting cpu cycles/battery, I may change this to use the same loop
as the select(...) expression with a timeout that backs off.

https://github.com/rjmcguire/goport/blob/tip/concurrentlinkedqueue.d queue
implementation


there is a problem with the file EV handler in that it can get spurios READ
events and I can't seem to set it to non-blocking.

The select(...) implementation and usage is quite interesting because it
works very much like Go's select statement.


On Mon, Aug 26, 2013 at 1:28 AM, Rory McGuire <rjmcgu...@gmail.com> wrote:

> Awesome thanks, thought what I did there was dodgy. It was really weird
> when this() started multiple schedulers at least now I see the obvious
> reason.
>
> BTW: gist is at: https://gist.github.com/rjmcguire/6336931
>
> Could someone point me at the correct linked list to use inside the
> channel. I'd prefer to use a range container of some kind if it exists in
> the std lib. I tried SList and had a bad experience hence the custom
> implementation.
>
>
>
> On Mon, Aug 26, 2013 at 1:21 AM, Timon Gehr <timon.g...@gmx.ch> wrote:
>
>> On 08/26/2013 12:55 AM, Rory McGuire wrote:
>>
>>>
>>> shared chan!Fiber scheduler; // channel contains Fibers waiting for
>>> their time slice
>>> static this () {
>>>      if (scheduler is null) {
>>>
>>
>>
>> You want 'shared static this' instead to avoid a race condition.
>>
>
>

Reply via email to