On 7/27/15 3:10 PM, Jack Stouffer wrote:
Hi,

I am currently working through a book on the fundamentals of computer
concurrency and I wanted to do all of the exercises in D. But I ran into
a problem when I tried to have a global semaphore:

/usr/local/Cellar/dmd/2.067.1/include/d2/core/sync/semaphore.di(35):
Error: constructor core.sync.semaphore.Semaphore.this
core.sync.semaphore.Semaphore cannot be constructed at compile time,
because the constructor has no available source code

Here is my code:

import core.sync.semaphore;
import core.thread;
import std.string;
import std.stdio;

shared string data;
shared Semaphore sem = new Semaphore();

This tries to create a new Semaphore class instance at compile time.

Instead, do this:

shared Semaphore sem;
shared static this() {
   sem = new Semaphore();
}

Which will run during runtime startup.

Or, you can initialize in main().

-Steve

Reply via email to