静态变量的访问需要序列化,因为静态变量时进程范围可见的。
无须序列化堆栈变量的访问,因为每个线程都有自己的堆栈。
标准的C运行库,只有有限的几个函数是可重入的,为了满足多线程编程的需要,必须提供可重入的函数库。C运行时函数库提供了其多线程版本的库,也就说单线程编程和多线程编程需要不同的函数库支持。
解释:
printf函数的运行:当一个程序开始执行时,startup代码自动打开三个标准流:标准输入流stdin,标准输出流stdout,标准错误流stderr,都是静态的,用户不能更改其值。stdout默认是输出到屏幕,printf要调用这个stdout变量,当多个线程同时调用printf函数,有可能引起问题。
C运行时函数库LIBCMT.LIB是创建多线程程序使用的,因此是可重入的。库MSVCRT.LIB,他调用共享的动态链接库MSVCRT40.DLL中的代码,也是可重入的。当你的引用程序调用这些库中的函数时,因遵循如下规则:1,调用必须使用C(——cdecl)调用方式;笔筒通过值传递或者指针传递为库函数传递参数。
关于可重入:代码可被多个线程共享。