A Race Condition Example
Let’s look at a race condition example.
We'll cover the following...
We'll cover the following...
The correctness of the program requires extra attention when mutable data is shared between threads.
Example
To see an example of a race condition, let’s consider multiple threads sharing the same mutable variable. The threads in the following program receive the addresses as two variables and swap their values a large number of times:
Press + to interact
D
import std.stdio;import std.concurrency;import core.thread;void swapper(shared(int) * first, shared(int) * second) {foreach (i; 0 .. 10_000) {int temp = *second;*second = *first;*first = temp;}}void main() {shared(int) i = 1;shared(int) j = 2;writefln("before: %s and %s", i, j);foreach (id; 0 .. 10) {spawn(&swapper, &i, &j);}// Wait for all threads to finish their tasksthread_joinAll();writefln("after : %s and %s", i, j);}
Although the program above gets compiled successfully, in most cases it would work incorrectly. Observe that it starts ten threads that all access the same two variables i
and j
. As a result ...