C语言的安全性能一直被人所忧虑. 一些有隐患的功能-比如字符操作不检查边界,文件操作部检查参数,-成为恶意攻击的高发地带.
C11标准使用一些更安全的版本来替代传统的安全困难户(老的函数保留以兼容旧代码). 另外C11包括了Unicode支持, 提高了与IEC 60559的浮点运算与复数运算另外增加了内存对齐的一些功能, 匿名结构与联合体, _Noreturn关键字, 还有最重要的多线程支持.
多线程
对于一般的C程序员来讲, C11带来的最大改变在于提供了标准化的多线程支持. 虽然多线程与C语言共存了很长一段时间了, 但是几乎所有的主流平台一直使用着各种非标准的多线程扩展,导致必然的移植问题.
新的C11头文件<threads.h>定义了线程创建与管理的函数, 还有mutex, 条件变量, _Atomic类型修饰字. 另外增加了新的头文件<stdatomic.h>定义了原子性操作的一些函数与定义. 最后C11引入了新的存储修饰字:_Thread_local(与C++11的thread_local相对应). 如果变量定义被_Thread_local修饰则该变量不会被多个线程共享, 而是每个线程会获取一个私有本地copy.
另外一个C11增加的线程相关功能为:quick_exit()函数, 当现成的协作取消不可用, exit()函数无法终止程序,则需要使用quick_exit(). quick_exit()函数保证at_quick_exit()注册的函数已注册的反向顺序被调用. 之后at_quick_exit()调用_Exit(),与exit()不同的是,_Exit()不清空进程的文件缓冲区.