looking for work-around: _d_assocarrayliteralTX segfault assigning a shared associative array an AA literal

mw mingwu at gmail.com
Tue Jun 13 17:42:08 UTC 2023


On Tuesday, 13 June 2023 at 17:12:41 UTC, Anonymouse wrote:
> On Tuesday, 13 June 2023 at 17:06:55 UTC, mw wrote:
>> Does anyone know how to fix it? or any work-around?
>>
>>
>> Thanks.
>
> I don't know if it's *correct* or not, but I think I did this 
> at the time to work around it.
>
> ```
> shared string[string] aa;
>
> void main()
> {
>     auto aaTemp = [ "abc" : "123" ];
>     aa = cast(shared)aaTemp;
> }
> ```

Thanks, I just did a simple test:

https://gist.github.com/run-dlang/88cefdde8bb7f61f173ad11b2a03d5ee

(BTW, https://run.dlang.org/ is not stable these few days).

```
import core.thread;
import std;
import std.parallelism;

shared string[string] aa;

void fun() {
   foreach (i; 0 .. 5) {
     writeln("fun", i, aa);
     foreach (num; parallel(iota(5))) {
         // writeln(num);
     }
     Thread.sleep(5.seconds);
   }
}


void main() {
     writeln("start", aa);
     auto aaTemp = [ "abc" : "123" ];
     aa = cast(shared)aaTemp;
     writeln(aa);
     foreach (num; parallel(iota(5))) {
       auto t = new Thread({fun();}).start();
     }
}
```

run result:
```
start[]
["abc":"123"]
fun0["abc":"123"]
fun0["abc":"123"]
fun0["abc":"123"]
fun0["abc":"123"]
fun0["abc":"123"]
fun1["abc":"123"]
fun1["abc":"123"]
fun1["abc":"123"]
fun1["abc":"123"]
fun1["abc":"123"]
fun2["abc":"123"]
fun2["abc":"123"]
fun2["abc":"123"]
fun2["abc":"123"]
fun2["abc":"123"]
fun3["abc":"123"]
fun3["abc":"123"]
fun3["abc":"123"]
fun3["abc":"123"]
fun3["abc":"123"]
fun4["abc":"123"]
fun4["abc":"123"]
fun4["abc":"123"]
fun4["abc":"123"]
fun4["abc":"123"]
```

looks like different threads can read the same `aa` contents. So 
at least it's working.


More information about the Digitalmars-d-learn mailing list