Linux的源码中x86体系结构原子操作的定义文件为。

文件内定义了原子类型atomic_t,其仅有一个字段counter,用于保存32位的数据。
其中原子操作函数atomic_inc完成自加原子操作。
可见,在对称多处理器架构的情况下,LOCK被解释为指令前缀lock。而对于单处理器架构,LOCK不包含任何内容。
要考虑编译器生成代码的问题。比如它看到你在一个循环里每次都访问这个变量,指不定就顺手给你在循环开始之前读出值放到寄存器中,然后循环过程中就不再去访问这个变量了,……
我只是举个例子,这种情况编译器一般还是可以应付的就是了……加了可以防止会碰上类似这样原理但是更特殊的情况而已
提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。
constintci=100;这里定义一个整型常量ci,其值为100.
const表示常量,意思是不会变,不允许变,编译器在编译时会检查是否有对此变量修改的操作,一经发现,报告错误:error:assignmentofread-onlyvariable`ci'
这里的const与volatile就相矛盾了
经在linux下测试,volatile这时不起作用!
1.运行一个进程中的多个线程,彼此之间使用相同的地址空间,共享大部分数据。
2.启动一个线程所花费的空间远远小于启动一个进程所话费的空间。
3.线程间切换所需要的时间远远小于进程间切换所需要的时间。
4.不同进程具有独立的数据空间,数据的传递只能通过通信的方式。--费时、不方便
统一进程下的线程之间共享数据空间,一个线程数据可以直接为其他线程所用。--快捷、方便
5.编写多线程需要注意的地方:
有的变量不能同时被两个线程所修改
1)提高应用程序相响应,将耗时长的操作置于一个新的线程,避免等待。
2)使CPU多核系统更加高效。
信息3)改善程序结构。将长而复杂的进程可以分为多个线程。
7.进程是资源分配的基本单位,线程没什么资源。共享进程资源
8.volatile的作用是:作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值.