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)
```