代码改变世界

随笔分类 -  Windows多线程

多线程二 多线程中的隐蔽问题揭秘

2012-08-23 11:12 by javaspring, 230 阅读, 收藏,
摘要: 上一篇《多线程一 CreateThread与_beginthreadex本质区别》中讲到一个多线程报数功能。为了描述方便和代码简洁起见,我们可以只输出最后的报数结果来观察程序是否运行出错。这也非常类似于统计一个网站每天有多少用户登录,每个用户登录用一个线程模拟,线程运行时会将一个表示计数的变量递增。程序在最后输出计数的值表示有今天多少个用户登录,如果这个值不等于我们启动的线程个数,那显然说明这个程序是有问题的。整个程序代码如下:#include <stdio.h> #include <process.h> #include <windows.h> volat 阅读全文

多线程一 CreateThread与_beginthreadex的本质区别

2012-08-23 09:54 by javaspring, 289 阅读, 收藏,
摘要: 1、尽量使用_beginthreadex()来代替使用CreateThread(),为什么? _beginthreadex()函数在创建新线程时会分配并初始化一个_tiddata块。这个_tiddata块自然是用来存放一些需要线程独享的数据。事实上新线程运行时会首先将_tiddata块与自己进一步关联起来。然后新线程调用标准C运行库函数如strtok()时就会先取得_tiddata块的地址再将需要保护的数据存入_tiddata块中。这样每个线程就只会访问和修改自己的数据而不会去篡改其它线程的数据了。因此,如果在代码中有使用标准C运行库中的函数时,尽量使用_beginthreadex()来代替C 阅读全文