假设我有以下代码:
// global variable
int i = 0;
...
EnterCriticalSection(&CriticalSection);
i = 45;
i = 24;
i = 32;
LeaveCriticalSection(&CriticalSection);
CPU能否缓存变量i
,当i
被修改时,缓存的副本就是被修改的副本,而当LeaveCriticalSection()
时> 被调用时,i
的缓存值被刷新到内存(以便其他线程可以看到更新的值)?
最佳答案
The following synchronization functions use the appropriate barriers to ensure memory ordering:
- Functions that enter or leave critical sections.
这并不一定意味着数据被“刷新到内存”。事实上,您可能会认为某些缓存是内存的一部分,而其他缓存可能与单个 CPU 相关联。 “适当的屏障”会尽机器架构所需的一切来保证所有 CPU 具有一致的 View 。
如需了解更多信息,您可能需要从 memory barriers 上的维基百科页面开始和 memory ordering .
关于c - LeaveCriticalSection() 是否将缓存的变量刷新到内存中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42685730/