如何定义线程安全数组?

AnA*_*ons 13 arrays multithreading synchronization d

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

我希望通过使用互斥锁和同步块来完成对它的每次访问.

像"T"这样的东西会是某种类型(请注意'sync'关键字当前未定义为AFAIK):

sync Array!(T) syncvar;
Run Code Online (Sandbox Code Playgroud)

每次访问它都将与此类似:

Mutex __syncvar_mutex;

    //some func scope....
    synchronized(__syncvar_mutex) { /* edits 'syncvar' safely */ }
Run Code Online (Sandbox Code Playgroud)

Str*_*ers -1

你的想法是正确的。作为数组,您需要能够编辑和检索信息。我建议您看一下Phobos 提供的读写互斥体原子实用程序。读取操作相当简单:

  1. synchronizemutex.readLock
  2. 负载(与atomicLoad
  3. 将项目复制出synchronize
  4. 返回复制的项目

写法应该是几乎一模一样的。只需syncronize打开mutex.writeLock并执行casatomicOp操作即可。

请注意,只有在读取期间复制数组中的元素时,这才有效。如果想要获取引用,则每次访问或修改元素时都需要对元素进行额外的同步。