易截截图软件、单文件、免安装、纯绿色、仅160KB

C runtime lib 线程安全

周五开会做团队成员codereivew, 有同事提出了一个关于gmtime多线程是否安全的问题, 当时觉得程序Link了VC的多线程库,应该不是问题。还好回头核实了一下,发现了竟是一个潜在的bug。
程序分在application(完成项目特定功能)和framework(可重用的核心功能)两部分,线程的启动由framework完成。 app中使用了gmtime/localtime等C库函数。
gmtime/localtime等C函数是非线程安全的,这个n年前就知道, 也知道在Windows平台上VC有MT版本的runtime library,通过线程的局部存储(TLS)实现了/mt 链接时的线程安全。 然而线程的启动必须通过C运行时库的_beginthreadex, 而不是win32 API CreateThead 。不幸的的是当年framework的实现者貌似不清楚_beginthreadex与CreateThread的区别(BTW, 这个是当年进入第一家公司的一道面试题,所以印象颇为深刻),直接调CreateThread启动了线程。
解决方案调查中,VC CRT竟是没有gmtime_r/localtime_r。
参考资料:
http://social.msdn.microsoft.com/forums/en-US/vclanguage/thread/c727ae29-5a7a-42b6-ad0b-f6b21c1180b2
http://www.tech-archive.net/Archive/VC/microsoft.public.vc.language/2006-02/msg00013.html


相关文档:

extern c的作用


1.引言
C++语言的创建初衷是“a better
C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++保留了一部分过程
式语言的特点(被世人称为“不彻底地面向对象”),因而它可以定义不属于任何类的全局变量和函数。但是,C++ ......

C。。。。越来越和谐了啊。。= =

输入一个英文语句(不记标点符号,单词之间只有一个空格),再逆向输出
例如:I am game boy
         boy game am I
#include<stdio.h>
#include<string.h>
int f(char,char,int,int);
int main()
{
char a[80]={0},b[80]={0},c[80]={0};
int i,n,m=0;
......

我的第一個C程式

時間不等人,在我還未老去之前,想把丟掉的C程式重新再揀起來。
入門,建議(我也是新手)不要看譚大爺的書,對于20世紀學習C語言,c Primer Plus 5th我認為是一個好的選擇。
我的第一& ......

C中的可变参数研究

一. 何谓可变参数
int printf( const char* format, ...);
这是使用过C语言的人所再熟悉不过的printf函数原型,它的参数中就有固定参数format和可变参数(用”…”表示)。
而我们又可以用各种方式来调用printf,如:
printf("%d",value);
printf("%s",str);
printf("the number is %d ,st ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号