Variable modified by different threads.
Andy Valencia
dont at spam.me
Mon Dec 2 02:23:44 UTC 2024
On Monday, 2 December 2024 at 02:02:56 UTC, Ritina wrote:
> How can I implement a program where I have a global integer
> variable g, and three threads: the first thread increments g by
> 1, the second thread increments g by 2, and the third thread
> increments g by 3? Additionally, while these threads are
> running, I should be able to access the value of g both inside
> and outside the threads.
Here's my own shared memory across multiple threads sample
program, It does a fine job of thrashing that cache line!
```
import core.atomic : atomicFetchAdd;
import std.concurrency : spawn;
import core.time : msecs;
import core.thread : Thread;
import core.memory : GC;
const uint NSWEPT = 100_000_000;
const uint NCPU = 4;
void
doadd(shared uint *buf)
{
for (uint count = 0; count < NSWEPT/NCPU; ++count) {
atomicFetchAdd(buf[0], 1);
}
}
void
main()
{
shared uint *buf =
cast(shared uint *)GC.calloc(uint.sizeof * 1,
GC.BlkAttr.NO_SCAN);
for (uint x = 0; x < NCPU-1; ++x) {
spawn(&doadd, buf);
}
doadd(buf);
while (buf[0] != NSWEPT) {
Thread.sleep(1.msecs);
}
}
```
More information about the Digitalmars-d-learn
mailing list