该博主真的是很牛逼。代码来自http://blog.csdn.net/morewindows/article/details/7442333
//经典线程同步互斥问题
#include <stdio.h>
#include <process.h>
#include <windows.h>
long g_nNum; //全局资源
unsigned int __stdcall Fun(void *pPM); //线程函数
const int THREAD_NUM = 10; //子线程个数
int main()
{
g_nNum = 0;
HANDLE handle[THREAD_NUM];
int i = 0;
while (i < THREAD_NUM)
{
handle[i] = (HANDLE)_beginthreadex(NULL, 0, Fun, &i, 0, NULL);
i++;//等子线程接收到参数时主线程可能改变了这个i的值 主线程会在子线程1、2、3等没有执行结束时来访问这里,也就是并不是等到线程1执行结束了,再创建线程2.所以线程X在Fun函数输出nThreadNum,i++已经被执行多次了。
}
//保证子线程已全部运行结束
WaitForMultipleObjects(THREAD_NUM, handle, TRUE, INFINITE);
return 0;
}
unsigned int __stdcall Fun(void *pPM) //pPM是一个指针地址,是0xabf2343542,这样的,不是int型,不是double型。
{
//由于创建线程是要一定的开销的,所以新线程并不能第一时间执行到这来
int nThreadNum = *(int *)pPM; //子线程获取参数
Sleep(50);//some work should to do
g_nNum++; //处理全局资源 子线程可以一窝蜂的来访问这里,子线程1执行到printf("线程编号为%d 全局资源值为%d\n", nThreadNum, g_nNum);这一句的时候,g_nNum++已经被执行多次了,g_nNum的值不在是1了。
Sleep(0);//some work should to do
printf("线程编号为%d 全局资源值为%d\n", nThreadNum, g_nNum);
return 0;
}
分享到:
相关推荐
linux原始版本代码及其注释。讲解相关的linux运作机制
去除注释 去注释 目前简简单单一个去除.cpp的 //注释 和 /**/注释。 其他文件需要去除注释改改代码应该就可以实现了。
一些常见的排序算法通过C语言来实现,包括算法思想和源代码
查阅了网上的一些资料并加上自己的理解,在大部分原文件中进行了注释,希望对各位看官理解nginx有帮助,如有不对的地方,请见谅!
Dreamweaver怎么给代码添加注释?给代码添加注释是好习惯,方便以后查看程序,该怎么添加注释呢?下面我们就来看看Dreamweaver注释的添加方法,需要的朋友可以参考下
matlab把一段代码全作为注释BestLeetCode 它是什么? 这是针对LeetCode.com中的问题集的非正式FAST(est)C ++解决方案。 我们希望该存储库可以帮助人们编写灵活的程序。 警告:此存储库以速度为目标。 有些解决方案...
此画图,我对每一行都加详细的注释,让你不再为理解不了别人写的代码而发愁!代码精炼,没有你多余的东西!
为了让别人一看就知道这段代码是做什么用的。正确的程序注释一般包括序言性注释和功能性注释。序言性注释的主要内容包括模块的接口、数据的描述和模块的功能。模块的功能性注释的主要内容包括程序段的功能、语句的...
完美去除C++注释 包括 行注释 与 块注释
这是一段关于使用ARIMA建立预测模型的代码,代码比较老,但是有注释,写的很清楚。值得一看!
所以写了一个程序来自动将C++的单行注释替换成C语言的注释格式. 压缩包中有两个文件. 其中 to_c_style_comment.c 中的我程序文件. cpptest.c 只是一个测试文件. 是一个包含C++单行注释的c源程序, 仅供测试用. 编译...
(该部分过长,包含了详细的代码注释还有运行运行训练结果说明,就不搬过来了,请去我的blog看吧!) 总结: 可以看出结果还是比较符合预期 在两个数相差很小时的判断结果就很接近0 其余情况就很接近1 在进行调整时 ...
一段优秀的程序离不开信息完整的注释,然而编写美观的注释,却又总会耗掉一点时间。现在有了本程序,只需输入少量内容,就可生成整齐划一的注释格式,再也不用为了美观而去手动对齐了。程序中输入的内容自动保存到 ...
词频统计
一个朋友要的,非常简单的java事务的处理代码.适合初学者看看!我已经写了注释了.
主要介绍了详解XML中的代码注释书写方法,文章中总结了注释使用的一些注意点,比如XML不支持嵌套注释等,需要的朋友可以参考下
本篇文章试用一段Python脚本来实现这一目标,并希望可以兼容统计不同语言编写的代码。 注释符号的研究 我们先来关注常见语言的注释符号构成。一般来讲注释符号分为单行注释符和多行注释符,以Python为例,则分别为#...
下面是一段用Python写的圣诞树源码: ``` height = 10 # 圣诞树的高度 for i in range(height): print(' ' * (height - i - 1) + '*' * (2 * i + 1)) print(' ' * (height - 1) + '|') ``` 这段代码可以输出一...
运行这段代码,你将看到一个懒羊羊图案绘制在Turtle窗口中。示例代码使用了Turtle库来实现绘图功能,通过调用不同的函数和方法来绘制懒羊羊的头部、身体、眼睛、腿和尾巴等部分。你可以根据自己的喜好调整懒羊羊的...
哈夫曼编码的c语言实现,代码中有注释。有编码和译码功能,能输出每个字符的Huffman码。可以输入一段Huffman码反应成文本,也可以输入一段文本翻译成Huffman码。计算了信源熵,编码效率,和平均编码长度。