D Language 2.0
Andrei Alexandrescu
SeeWebsiteForEmail at erdani.org
Mon Jan 18 15:14:52 PST 2010
Jérôme M. Berger wrote:
> Andrei Alexandrescu wrote:
>> Andrei Alexandrescu wrote:
>>> Nick Sabalausky wrote:
>>> [snip]
>>>> It's been no worse at threading than C/C++ for quite some time. It's
>>>> just starting to have a threading model that kicks the crap out of
>>>> the threading in the vast majority of languages out there.
>>> BTW, that effort is going quite well. For example, a producer-consumer
>>> file copy program using the proposed API has 20 lines, correctness and
>>> all.
>>>
>>> import std.algorithm, std.concurrency, std.stdio;
>>>
>>> void main() {
>>> enum bufferSize = 1024 * 100;
>>> auto tid = spawn(&writer);
>>> // Read loop
>>> auto src = stdin.by!(ubyte)();
>>> for (;;) {
>>> auto buffer = UniqueArray!(ubyte)(bufferSize);
>>> auto length = copy(take(src, bufferSize), buffer).length;
>>> send(tid, move(buffer));
>>> if (length == 0) break;
>>> }
>>> }
>>>
>>> void writer() {
>>> // Write loop
>>> auto tgt = stdout.by!(ubyte)();
>>> for (;;) {
>>> auto buffer = receiveOnly!(UniqueArray!ubyte)();
>>> copy(buffer, tgt);
>>> }
>>> }
>>>
>>>
>>> Andrei
>> Sorry for the monologue. Actually I reworked the example into the even
>> simpler:
>>
>> import std.concurrency, std.stdio;
>>
>> void main() {
>> enum bufferSize = 1024 * 100;
>> auto tid = spawn(&writer);
>> // Read loop
>> foreach (immutable(ubyte)[] buffer; stdin.byChunk(bufferSize)) {
>> send(tid, buffer);
>> }
>> }
>>
>> void writer() {
>> // Write loop
>> for (;;) {
>> auto buffer = receiveOnly!(immutable(ubyte)[])();
>> tgt.rawWrite(buffer);
>> }
>> }
>>
>> We actually have implemented all the pieces to make this work.
>>
> Shouldn't you declare "tgt" somewhere (you did in your first example...
>
> Jerome
I meant stdout instead of tgt.
Andrei
More information about the Digitalmars-d
mailing list