【发布时间】:2014-08-15 16:46:20
【问题描述】:
假设我有 4 个线程,它们都循环遍历具有 100 个索引的数组,翻转每个索引中的信息位并写回该索引...
arr[];
Thread 1:
for (int i = 0; i< 100; i+=4) { flip bits of arr[i]}
Thread 2:
for (int j = 1; j< 100; j+=4) { flip bits of arr[j]}
Thread 3:
for (int k = 2; k< 100; k+=4) { flip bits of arr[k]}
Thread 4:
for (int l = 3; l< 100; l+=4) { flip bits of arr[l]}
我在并发方面完全是个菜鸟,所以我想知道这是否是一种好的做法,或者是否有其他方法可以做到这一点?
更新:为了清楚起见——如果“arr[i] 的翻转位”和“arr[j] 的翻转位”由于某种原因触及同一个对象/成员,那么“非线程安全”的答案是显而易见的(并且与数组或实际问题无关),因此假设这些操作不会直接或在某些更深层次的对象中接触不同 i 和 j 对的相同内存。
【问题讨论】:
-
很难说如果你甚至没有告诉我们你正在学习哪种编程语言......
-
如果它是 Java,你会遇到可见性问题
-
@Skorpius 我建议您进一步解释“翻转每个索引中的信息位并写回该索引”的含义
标签: java arrays multithreading thread-safety