gpt4 book ai didi

arrays - 如何定义线程安全数组?

转载 作者:行者123 更新时间:2023-12-02 10:36:25 27 4
gpt4 key购买 nike

如何以最少的修改定义线程安全的全局数组?

我希望对它的每次访问都通过使用互斥锁和同步块(synchronized block)来完成。

像“T”这样的东西将是某种类型(请注意,“sync”关键字当前尚未定义):

sync Array!(T) syncvar;

对它的每次访问都与此类似:

Mutex __syncvar_mutex;

//some func scope....
synchronized(__syncvar_mutex) { /* edits 'syncvar' safely */ }

最佳答案

我天真的尝试是做这样的事情:

import std.typecons : Proxy:

synchronized class Array(T)
{
static import std.array;
private std.array.Array!T data;
mixin Proxy!data;
}

遗憾的是,它不起作用,因为 https://issues.dlang.org/show_bug.cgi?id=14509

不能说我非常惊讶,因为通过隐藏互斥体自动处理多线程在现代 D 中非常不惯用,并且同步类的概念主要是 D1 时代的遗物。

当然,您可以手动实现相同的解决方案,方法是使用所有必要的方法定义自己的 SharedArray 类,并在调用内部私有(private)普通 Array 方法之前在方法内添加锁。但我认为您想要一些开箱即用的东西。

现在无法发明任何更好的东西(会更多地考虑它),但值得注意的是,一般来说,D 中鼓励创建旨在显式处理共享访问的数据结构,而不仅仅是保护正常的数据结构与互斥体。当然,最受鼓励的方法是完全不共享数据,而是使用消息传递。

如果我想到更好的答案,我会更新答案。

关于arrays - 如何定义线程安全数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29806668/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com