- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
让我们假设有一个使用vector 的并发情况。每个线程以写入和读取模式访问数组的不同单元格。
我将展示一个“C/C++-like”代码片段,只是为了提供一个想法:
uint8_t vector[SIZE];
void thread(int id_thread) {
// vector is a global variable, same for all threads
vector[id_thread] = id_thread;
}
// Somewhere
for (i = 0; i < SIZE; ++i) {
createThread(thread, i); // create a thread and passing i as id_thread
}
SIZE
个单元组成的 vector 。 uint8_t
(8 位,1 字节)。假设有一个现代的、通用的 PC 架构:intel(R) 处理器 64 位。我对这些操作的安全性(并发性)有任何保证吗?
当一个单元格为 8 位时,问题就变成了这样一个事实:处理器访问内存时将 WORD(32 位或 64 位)带入其寄存器。
两个线程写入两个相邻的 vector 单元并产生幽灵写入是否会发生?或者是否有一个晦涩的(对我来说)“设计”可以避免这种情况?
[0] [0] [0] [0] ... [0]
_______________
uint8 * 4
thread1: [1] [0] [0] [0] and write in memory
thread2: [0] [1] [0] [0] and write in memory
---------------
overlap if processor write 32-bit at least.
我错了吗?处理器可以在不以任何方式接触(缓存,包括)相邻字节的情况下将单个字节写入内存?
谢谢。
最佳答案
只要它不能破坏单线程代码,编译器就可以自由地将写入实现为机器指令。例如,它可以将 32 位值读入寄存器,更改适当的字节,然后将 32 位值写回内存。这会破坏其他写入。
关于vector 的并发性,其中每个单元格在 32 位架构上为 8 位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39038041/
我有这个代码: private void doSomething() throws InterruptedException { WorkerThread w= new WorkerThrea
我有一个关于并发的简单问题。我正在通过可运行接口(interface)实现线程和并发。如果我首先初始化线程,然后在初始化后单独调用 start,或者如果我初始化线程并从同一个 for 循环中调用 st
我刚开始接触并发,所以如果我问一些明显/愚蠢的问题,请多多包涵。我正在尝试采取第一步来改造我必须利用 Java 货币的模型。没有详细说明,我有一部分模型加载了一些文件,然后在给定请求时它返回文件上的一
我有一个 java 类,它同时被很多线程访问,我想确保它是线程安全的。该类有一个私有(private)字段,它是字符串到字符串列表的映射。我已将 Map 实现为 ConcurrentHashMap 以
正如我们所知,ThreadPoolExecutor 使用一些 BlockingQueue 作为传入任务的队列。我想要的是让 ThreadPoolExecutor 有一个 second 队列,用于准备就
若两个操作同时发生,则称为并发,但事实上,操作是否在时间上重叠并不重要。由于分布式系统复杂的时钟同步问题,现实中很难严格判断两个事件是否同时发生。 为更好定义并发性,并不依赖确切发生时间,即若两个操作
这是计算任意数的阶乘的代码: unsigned long long factorial(int n) { Concurrency::combinable products=Concurrency:
我找不到使用最新的 JAVA 并发例程的这种特定情况的示例。 我计划使用threads 来处理来自开放队列的项目,该队列可能包含 0 到数千个请求。我想限制在任何给定时间有不少于 0 且不超过 10
我正在迈出学习多线程的第一步,并构建一个小测试程序,以便为自己提供一些见解。由于重新排序的可能性,我不相信我的解决方案是安全的.. 这是主程序: public class SynchTest {
我目前正在从事一个搜索引擎项目。为了更快的爬行速度,我在每次链接访问时使用一个 goroutine。但是我遇到了两个让我疑惑的问题! 第一个是代码示例: package main import "fm
我一直在使用 Azure 存储队列通过 QueueTrigger 属性来提供 WebJob。我将 QueueTrigger 配置为将多个项目出队以进行并发处理,如下所示: public static
我正在使用Rails的一些中间件,使用的是最新版本: pfernand-2-mn:~ pfernand$ rails -v Rails 3.1.2 这是rake middleware的输出: use
我一直在尝试使用 Azure Data Lake Store,并且在文档中 Microsoft 声称该系统针对低延迟小文件写入进行了优化。测试它我尝试对单个文件执行大量并行任务写入,但此方法在大多数情
假设我有一个同步的 HashMap,它有一个字符串作为键和一个列表作为值。 Map> map = Collections.synchronizedMap(new HashMap>()); 这个列表是线
这个问题在这里已经有了答案: ConcurrentModificationException for ArrayList [duplicate] (6 个答案) 关闭 9 年前。 我有一个关于我的
问题 当且仅当有空闲 CPU 时,我如何扩展以使用更多线程?像 ThreadPoolExecutor 这样的东西,它在 cpu 核心空闲时使用更多线程,如果没有空闲则更少或只使用一个线程。 用例 现状
这个问题已经有答案了: 已关闭13 年前。 Possible Duplicate: Thread safety in Java class 我正在阅读实践中的 Java 并发,并且我遇到了一个令我困惑
Stroustrup 在C++ 第 4 版第 1193 页中给出了以下示例。我的问题是使用两个线程的并发程序,一个用于 f(),另一个用于 g() 以及 Stroustrup 的声明: if a li
我是一名优秀的程序员,十分优秀!