< 返回版块

moon 发表于 2018-09-12 15:19

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


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

评论区

写评论
作者 moon 2018-09-12 15:59

好哒,感谢。

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

wayslog 2018-09-12 15:42

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

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