线程安全
回答
这个特殊情况是安全的,是的。
读取和写入数组的不同部分不会干扰其他操作。
但是,根据元素的类型和元素的大小,读取和写入相同的位置会给您带来问题。
长话短说:是的。只要它到两个不同的地点,它就是一个安全的操作。
前段时间有一个discussion about this,如果您好奇,它有一些有用的信息。
+1从来没有想过这是线程安全的,但我明白它是为什么。谢谢! – 2010-05-09 19:56:36
我不确定这是保证安全。想象一下你有byte []。这些字节在内存中紧密排列。现在,如果您修改这些字节,编译器可能会合并一些写入来执行字(32位)大小的读取修改写入操作。在一些CPU上,例如ARM,这是编译器唯一的内存修改指令。如果您一次修改多个字节,这非常方便。 CPU也可以做同样的事情。它也可以在你不知道它的情况下重新排序。面对这种优化,读取相邻存储器的线程可能会看到部分修改。你不会看到这种效果,因为堆分配器对你很好,并且总是给你至少是字对齐的内存。
+1:在我看来这是最好的答案。总是最好怀疑无锁的穿线习语。我可以想到各种内存障碍问题,即使线程在不同的阵列位置上工作也可能导致问题。只是在问题中提供的信息不足以给出明确的答案。 – 2010-05-09 20:57:11
- 1. java线程安全:线程安全吗?
- 2. 线程安全
- 3. 线程安全
- 4. 线程安全
- 5. 线程安全
- 6. 线程安全
- 7. 线程安全
- 8. 线程安全
- 9. 线程安全
- 10. 线程安全
- 11. 线程安全应用程序中的线程安全
- 12. 线程安全:: random_device
- 13. 线程安全singelton
- 14. 线程安全树
- 15. 线程安全bloomfilter
- 16. httpurlconnection线程安全
- 17. 线程安全OfType
- 18. 线程安全UITableView
- 19. nftw线程安全
- 20. IndexedDB线程安全
- 21. Mysqldatasource线程安全
- 22. CDatabase线程安全
- 23. NSMutableString线程安全?
- 24. SolrJ线程安全
- 25. Database.SqlQuery线程安全
- 26. 线程安全的
- 27. 线程安全,Silverlight
- 28. GTK +线程安全
- 29. Array.forEach线程安全
- 30. RxJava线程安全
只要这些项目在单独的CPU字词 – Stewart 2010-05-09 19:55:56
+1从来没有想过这是线程安全的,但我明白它为什么。谢谢! – 2010-05-09 19:57:29
考虑使用无锁算法时,认为“同一位置”与CPU(多个)所认为的位置不同,这一点很重要。内存的CPU视图与C这样的视图语言完全不同,它给了我们字节占用地址的地方。在某些数据类型的某些CPU架构(特别是ARM,Power)上,即使这可能不安全 – Stewart 2010-05-09 22:59:57