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使读者始终完全无需等待;它们只是取消对当前有效结构的指针的引用。更新就像原子化地替换指针一样简单。回收旧结构是变得复杂的地方:在重用内存块之前,必须确保每个读卡器线程都读取了内存块。
简单设置
|
Namit Patel · 如何将数组作为返回值传递给线程? 6 年前 |
Davi Wesley · 对线程使用参数 6 年前 |
Jay Wang · 生产者/消费者实施:陷入消费者循环 6 年前 |
Razonixx · 从线程内增加全局计数器变量,而不必等待每个线程 6 年前 |
MohammadReza Vahedi · 返回响应后运行函数 6 年前 |
AshR · 程序断断续续地使用main报告与线程本身不同的线程id 7 年前 |
filo · 如何在x86上使用gcc强制执行内存排序 7 年前 |