Error running concurrent process and storing results in array
data pulverizer
data.pulverizer at gmail.com
Wed May 6 04:25:03 UTC 2020
On Wednesday, 6 May 2020 at 03:56:04 UTC, Ali Çehreli wrote:
> On 5/5/20 8:41 PM, data pulverizer wrote:> On Wednesday, 6 May
> 2020 at 03:33:12 UTC, Mathias LANG wrote:
> >> On Wednesday, 6 May 2020 at 03:25:41 UTC, data pulverizer
> wrote:
>
> > Is there something I need to do to wait for each thread to
> finish
> > computation?
>
> thread_joinAll(). I have an example here:
>
>
> http://ddili.org/ders/d.en/concurrency.html#ix_concurrency.thread_joinAll
This worked nicely thank you very much
> ... I want to point out that there is also std.parallelism,
> which may be better suited in many cases.
I actually started off using std.parallelism and it worked well
but the CPU usage on all the threads was less than half on my
system monitor meaning there is more performance to be wrung out
of my computer, which is why I am now looking into spawn. When
you suggested using thread_joinAll() I saw that is in
`core.thread.osthread` module. It might be shaving the yak this
point but I have tried using `Thread` instead of `spawn`:
```
void process(double x, double y, long i, shared(double[]) z)
{
z[i] = x*y;
}
void main()
{
import core.thread.osthread;
import std.stdio: writeln;
long n = 100;
shared(double[]) z = new double[n];
for(long i = 0; i < n; ++i)
{
auto proc = (){
process(cast(double)(i), cast(double)(i + 1), i, z);
return;
};
new Thread(&proc).start();
}
thread_joinAll();
writeln("z: ", z);
}
```
and I am getting the following error:
```
onlineapp.d(20): Error: none of the overloads of this are
callable using argument types (void delegate() @system*),
candidates are:
/dlang/dmd/linux/bin64/../../src/druntime/import/core/thread/osthread.d(646): core.thread.osthread.Thread.this(void function() fn, ulong sz = 0LU)
/dlang/dmd/linux/bin64/../../src/druntime/import/core/thread/osthread.d(671): core.thread.osthread.Thread.this(void delegate() dg, ulong sz = 0LU)
/dlang/dmd/linux/bin64/../../src/druntime/import/core/thread/osthread.d(1540): core.thread.osthread.Thread.this(ulong sz = 0LU)
```
More information about the Digitalmars-d-learn
mailing list