该博主真的是很牛逼。代码来自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;
}
分享到:
相关推荐
这个压缩包包含了小米便签应用的完整源代码,并且每段代码都有详细的注释,使得初学者能够更好地理解和学习代码的实现逻辑。 在Java编程中,源代码是程序员用人类可读的语言编写的程序文本,它描述了计算机应该如何...
Java代码注释是编程实践中非常重要的一个环节,它有助于提高代码的可读性和维护性。在团队合作中,良好的代码注释能够帮助其他开发者更快地理解代码的功能和逻辑,节省了阅读和调试的时间。本资源包含一个“java代码...
其中,代码注释模板是一项非常实用的功能,可以帮助程序员快速生成规范、一致的注释,提高开发效率并保持代码的可读性。 在Eclipse中,用户可以自定义代码注释模板,这通常涉及到类、方法、变量等不同类型的注释...
首先,这款“C/C++/Java 源代码注释清除工具”的出现,很好地满足了开发人员在特定阶段对代码文件“去注释化”的需求。注释的存在虽然在开发阶段对于代码的可读性有着不可或缺的作用,但在软件发布前,注释可能会...
VB代码注释器是一款专为Visual Basic (VB)开发者设计的实用工具,旨在提升编程效率,简化代码注释和取消注释的操作。该插件在安装后,会在VB的集成开发环境(IDE)中添加新的功能按钮,允许用户快速地对代码进行注释...
- **示例**:“对linux内核代码做了一个比较详尽的描述”中的部分代码片段提到了内核初始化阶段的一些关键步骤,如硬件资源的分配、核心数据结构的建立等。 #### 2. 内存管理模块 - **描述**:这部分注释重点解释了...
源代码注释通常会解释函数的作用、变量的意义以及关键流程的逻辑。通过阅读这些注释,我们可以了解到: 1. **进程管理**:这部分代码处理进程创建、调度、同步和通信。注释会解释如何实现多任务并行,如何在不同...
而"稀缺资源代码注释器"正是一款专注于帮助开发者理解和翻译代码的实用工具,尤其对于C++和Java这两种广泛使用的编程语言。本文将详细探讨代码注释器的工作原理、使用方法及其在实际开发中的价值。 首先,我们来...
需要编写一个简单的词法分析器,逐字符扫描代码,遇到`//`或`/*`时开启注释状态,直到遇到相应的结束符才关闭。这需要对编译原理有一定的理解。 在实际操作中,如果已经有现成的工具,比如`quzhushi.exe`和`...
总的来说,这个"Qt编写移除C++代码注释源码"项目是一个实用的工具,它展示了Qt5的文本处理能力和对C++语法的理解。通过学习和分析这段源码,开发者不仅可以掌握如何使用Qt进行文件操作,还能深入理解C++的语法结构,...
此外,即使对于单个开发者,过一段时间后重新查看自己的代码,有注释也会使理解过程更加顺畅。 其次,良好的注释有助于预防和定位错误。当程序出现异常或bug时,注释可以提供上下文信息,帮助开发者更快地定位问题...
例如,你可以将一段Java代码转换为C++,以便在C++环境中运行或理解。 2. **代码解析**:注释器会解析代码的结构,包括变量定义、函数调用、循环结构等,并以图形化的方式展示,便于用户直观地理解代码流程。 3. **...
例如,你可以选择一段代码,然后使用快捷键或菜单选项将其转换为注释或取消注释。 2. 版本控制工具: Git等版本控制工具在合并代码时,有时会遇到冲突,这时可以使用其内置的命令或第三方工具来帮助解决,这些工具...
注释会解释每段代码的作用,帮助初学者理解代码流程和逻辑控制。 2. **第2章代码**:可能涉及到面向对象编程的基本概念,如类、对象、属性、方法、构造函数以及继承、封装和多态。注释将解释这些概念如何在实际代码...
《俄罗斯方块源代码加详细注释》是一个非常适合初学者学习的游戏开发资源,它提供了完整的俄罗斯方块游戏的源代码,并且附带了详尽的注释,方便理解每个部分的功能和逻辑。在这个项目中,我们可以深入学习到游戏编程...
通常,这类工具会区分单行注释(以`//`开头)和多行注释(以`/* */`包围),并且可能还会考虑预处理器指令(如`#define`和`#if`等)对代码行的影响。 在实际应用中,这种代码统计工具可能会有以下功能: 1. **统计...
通过研究Linux 0.01的源代码和注释,开发者和操作系统爱好者可以深入理解Linux的早期发展,以及如何从一个简单的项目演变为全球广泛使用的强大操作系统。这不仅有助于技术学习,也是对开源精神和社区贡献模式的一种...
例如,很多团队使用“TODO”来表示一段需要额外工作的代码。 9. Comment code while writing it(写代码的同时,完成注释) 写代码的同时添加注释,因为此时你的思路最为清晰。如果你把注释的任务留到最后,那么你...
通过`#define`关键字,我们可以定义一个标识符(宏名)来代表一个常量、表达式或者是一段代码。例如,定义一个简单的宏可以这样写: ```c #define PI 3.14159 ``` 在代码中,每次遇到`PI`时,编译器都会将其替换为...
Eclipse是一款广泛使用的Java集成开发环境(IDE),它提供了丰富的功能来支持开发者遵循特定的代码注释风格。本文将详细讲解Eclipse中的代码注释风格,以及如何设置和使用这些风格。 一、代码注释类型 Eclipse支持...