![]() |
1
3
你真的应该
使用互斥
(因为您提到了Pthread),所以添加
在访问共享数据的任何其他代码中也是如此。 你也可以调查 atomic operations (但在你的情况下,你最好使用 mutex 如上图所示)。 阅读一些 pthread tutorial . 避免 race conditions 和 undefined behavior .
你不能那样做 ,除非您正在实现一个线程库(其中一些部分应该在汇编程序中进行编码并使用 futex(7) ),如 nptl(7) 实施 pthreads(7) 在GNU中 glibc (或 musl-libc ). 您应该使用互斥体,并且不想浪费时间来实现线程库(所以请使用现有的线程库)。 请注意,Linux上的大多数C标准库(包括glibc和musl libc)都是 free software ,因此您可以研究它们的源代码(如果您想了解Pthread互斥锁是如何实现的,等等)。
它主要不是(当然不仅仅是)编译器,而是硬件。阅读关于 cache coherence . 操作系统也可能参与其中( futex(2) 有时由pthread mutex例程调用)。 |
![]() |
2
2
如果您只需要能够设置
但是如果你想设置
对于seqlock,您有一个序列号,而不是启用=真/假标志。读卡器可以通过在读取其他成员之前检查序列号,然后在读取其他成员之后再次检查序列号来检测“撕裂”写入。(但所有成员必须
RCU使读者始终完全无需等待;它们只是取消对当前有效结构的指针的引用。更新就像原子化地替换指针一样简单。回收旧结构是变得复杂的地方:在重用内存块之前,必须确保每个读卡器线程都读取了内存块。
简单设置
|
|
Anon. · 用汇编语言解释这一行? 6 年前 |
![]() |
wangt13 · 如何使用VMX暂停和恢复VM 6 年前 |
![]() |
Kay · Skylake和更新的环形巴士 6 年前 |
![]() |
Kadir · Intel芯片上的半精度浮点算法 6 年前 |
![]() |
Some_Dude · x86汇编牛顿平方根算法寄存器为1#IND 6 年前 |