< 返回版块

这个arc和mutex的例子看不懂

moon 发表于

新手有几个问题: 01- mutex为了防止数据竞争,那为何不用单线程,而要用多线程。 02- 像例子这样累加获得data2[0]的值,有什么用,用在什么场景下呢? 03- let data1 = data.clone(); 克隆后锁定状态也被克隆了是么? 谢谢!


代码在这里: https://gist.github.com/rust-play/eb85ea5c9ec1c9fb31b5db3fec9db33c

评论区

wayslog 2018-09-12T07:37:05.364873
  1. 以前比尔盖茨还认为每个人只要 640K 存储空间就够了呢。多线程的目的就是为了充分利用多核。你在 mutex 保护范围内的代码是一次只能跑一个线程的。但是刨去了mutex的范围我们还能做很多事情。
  2. 没什么用,这是告诉你可以这么用。你用例子去证明实际的逻辑,是不是太以偏概全了。管中窥豹,可见一斑。提个 example 的目的是告诉你,可以这么做,而不是告诉你,这么做有啥意义。真的细追究的话,你知道hello world有啥意义么?
  3. 不会,你clone的只是一个指针而已。ARC是一个指针,它被clone的时候其实只是复制了一个地址。所以当你clone之后,你的 cloned 和 original 对象都指向的一个地址而已。仅此而已。 另外如果你在Mutex锁定过程中clone的话,你会得到两个同时指向一个已被锁定的mutex的指针。也没啥问题。
wayslog 2018-09-12T07:42:10.784170

另外你应该用 JoinHandler 的 join 来等待thread完成而不是靠 sleep main thread ...

作者 moon 2018-09-12T07:59:13.456622

好哒,感谢。

@wayslog 另外你应该用 JoinHandler 的 join 来等待thread完成而不是靠 sleep main thread ...

1 共 3 评论, 共 1 页