|
|
1
10
原子性是不够的。 我通常希望得到一个变量的最新值,而不是潜在地看到一个过时的值——所以需要某种类型的内存屏障,无论是读还是写。锁是一种很简单的方法来实现这一点,代价是由于争用可能会损失一些性能。 我 习惯于 相信在这种情况下,使变量波动就足够了。我不再相信这是事实。基本上,我现在尽量避免在涉及共享数据时编写无锁代码,除非我能够使用由真正了解这些内容的人(如Joe Duffy)编写的构建基块。 |
|
|
2
7
这里有 volatile 关键字。没有它是否安全取决于场景。但是编译器可以做到 funny stuff 如重组操作顺序。因此,即使对一个字段进行读/写也可能是不安全的。 |
|
|
3
4
这可能是个问题。这不仅仅是你必须关注的任务本身。由于缓存,如果不锁定,并发线程可能会看到对象的旧版本。因此,是否需要锁将取决于您如何使用它,而您没有显示这一点。 这里有一个 free, sample chapter of "Concurrent Programming in Windows" 这就详细解释了这个问题。 |
|
|
4
0
这完全取决于属性是否将被多个线程访问。有些变量被称为原子操作,在这种原子操作的情况下,不需要使用锁。抱歉英语不好。 在您的情况下,不可变,我认为锁是不必要的。 |
|
|
JLosc · Powershell脚本因文件锁定而失败 2 年前 |
|
|
Sriram Umapthy · PostgreSql行级锁 2 年前 |
|
|
a a · 为什么在这个可重入锁示例中需要引用计数? 4 年前 |
|
|
JohnLBevan · 为什么原子语句上需要锁提示? 8 年前 |