Pon*_*oni 9 c cpu memory-management shared-memory
一段时间以来我一直在想的一个简单的问题; CPU是否以原子方式分配值,或者是逐位分配值(例如,32位整数).
如果它是一点一滴的,访问这个确切位置的另一个线程是否可以获得待分配值的"部分"?
想一想:
我有两个线程和一个共享的"unsigned int"变量(称之为"g_uiVal").
两个线程循环.
On正在使用printf("%u \n",g_uiVal)打印"g_uiVal".
第二个只是增加这个数字.
打印线程是否会打印出完全不属于"g_uiVal"值的部分?
在代码中:
unsigned int g_uiVal;
void thread_writer()
{
 g_uiVal++;
}
void thread_reader()
{
 while(1)
  printf("%u\n", g_uiVal);
}
取决于CPU和内存的总线宽度.在PC上下文中,除了非常古老的CPU之外,最多32位访问的访问是原子的; 64位访问可能是也可能不是.在嵌入式空间中,许多(大多数?)CPU是32位宽,并且没有任何更宽的规定,所以int64_t保证是非原子的.
| 归档时间: | 
 | 
| 查看次数: | 420 次 | 
| 最近记录: |