相关疑难解决方法(0)

指针写入不是原子的最常见配置是什么?

我对多线程很感兴趣.该领域有很多陷阱,例如,无法保证指针写入是原子的.我明白这一点,但想知道实际情况下最流行的当前配置是什么?例如,在我的Macbook Pro/gcc上,指针写入肯定似乎是原子的.

c c++ multithreading atomic

6
推荐指数
1
解决办法
193
查看次数

寻求有关共享内存锁定问题的文章

我正在审查一些代码,并对使用的技术感到怀疑.

在Linux环境中,有两个进程连接多个共享内存段.第一个进程定期加载要共享的新文件集,并将共享内存id(shmid)写入"master"共享内存段中的某个位置.第二个过程不断读取此"主"位置,并使用shmid附加其他共享段.

在多CP​​U主机上,在我看来,如果一个进程在被另一个进程写入时尝试读取内存,可能会依赖于实现.但也许硬件级总线锁定可以防止线路上的损坏位?如果读取过程得到一个很快就要改变的值,那么只要读取被破坏为既不是旧值也不是新值的东西也是无关紧要的.这是一种边缘情况:只有32位被写入和读取.

谷歌搜索shmat的东西并没有让我在这方面做出任何明确的决定.

我强烈怀疑它不安全或理智,而我真正喜欢的是指向详细描述问题的文章的一些指示.

shared-memory

3
推荐指数
3
解决办法
4148
查看次数

为什么穿线危险?

我总是被告知要对多个线程将访问的变量进行锁定,我一直认为这是因为你要确保在你写回来之前你正在使用的值没有改变,即

mutex.lock()
int a = sharedVar
a = someComplexOperation(a)
sharedVar = a
mutex.unlock()
Run Code Online (Sandbox Code Playgroud)

你有理由把它锁定.但在其他情况下,我不明白为什么我不能不使用互斥锁.

线程A:

sharedVar = someFunction()
Run Code Online (Sandbox Code Playgroud)

线程B:

localVar = sharedVar
Run Code Online (Sandbox Code Playgroud)

在这种情况下可能出现什么问题?特别是如果我不关心线程B读取线程A分配的任何特定值.

multithreading

3
推荐指数
1
解决办法
1530
查看次数

是否有一个平台没有本机指针大小的原子,但具有其他大小的原子?

我正在对广泛使用的开源库进行重构,并希望使其尽可能强大。

目前,如果支持的话,它会使用原子size_t变量,但我想知道它是否会错过一些不起眼的平台,例如,32 位原子同时具有 64 位指针。

c++ multithreading atomic cpu-architecture rust

1
推荐指数
1
解决办法
109
查看次数

标签 统计

multithreading ×3

atomic ×2

c++ ×2

c ×1

cpu-architecture ×1

rust ×1

shared-memory ×1