易截截图软件、单文件、免安装、纯绿色、仅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/S模式与B/S模式的比较分析

一、C/S模式与B/S模式的比较分析
  C/S模式主要由客户应用程序(Client)、服务器管理程序(Server)和中间件(middleware)三个部件组成。客户应用程序是系统中用户与数据进行交互的部件。服务器程序负责有效地管理系统资源,如管理一个信息数据库,其主要工作是当多个客户并发地请求服务器上的相同资源时,对这些资源进行最 ......

C语言编写linux下的守护进程

利用
下载的这段代码,成功实现了守护进程,原来守护进程是很简单的事情。
  在main函数中执行
  init_daemon();//初始化为Daemon
  就可以把进程变成守护进程
  
#include
#include
#include
#include
#include
void
 init_daemon(void
)
{
int
 pid;
int
 i;
if
(pid=fork()) ......

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语言写一些字符串处理的程序时种种的不便,本人坚信"磨刀不误砍柴功"这个信条,于是在专门
进行了一次磨对C语言的磨刀,写了一些字符串的处理函数, 方便网友使用, 大家有好的解决方法也请告知一下.
    我估计有一些C的库中肯定有比我这更好的函数, 但是本人没有找到, 望"行家"告知.
#include <string.h> ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号