![]() |
1
1
从技术上讲,在多核或多处理器系统中,唯一具有原子性的是汇编操作码,这些操作码被专门记录为原子的。即使是读取一个字节,在您读取它之前,另一个处理器出现并修改它的可能性也很小,除了在某些情况下处理CPU缓存和对齐的内存块(有趣的线程: http://software.intel.com/en-us/forums/showthread.php?t=76744 ,有趣的是: http://www.corensic.com/CorensicBlog/tabid/101/EntryId/8/Memory-Consistency-Models.aspx ) 您必须使用内部保证原子性的类型,或者特别保护多线程多核系统上的访问。 (在.NET和JVMs这样的IL平台上,答案可能会稍有变化,因为它们对什么是原子的和什么不是原子的做出了自己的保证)。 |
![]() |
2
1
当然,锁定非原子操作,检查两个不同的值将被视为非原子操作,但如果处理器不缓存结果,您可以使用一些技巧来检查最多4个字节或更多字节。你必须考虑如何使用你的数据。但基本上,任何对共享内存的访问都应该有一个信号量。 |
![]() |
arkham knight · 使用信号量的线程同步 7 年前 |
![]() |
K.Miao · 其他进程不会使用信号量唤醒 7 年前 |
|
Akhil V · 生产者消费者C中的细分错误 7 年前 |
![]() |
Dark Inspiration · 信号和互斥行为怀疑 9 年前 |
![]() |
sheikh_anton · 选择共享内存或unix信号量键的惯用方法 9 年前 |
|
user5134749 · 同步:线程以相同的顺序执行两个关键部分 9 年前 |
![]() |
Zhang Biao · 如何在FreeRTOS中使用互斥锁? 9 年前 |