多线程编程 之 入门篇

<pre name="code" class="cpp">自己第一次涉及c语言的多线程编程,实属入门了解级别的;之前只做过java的Runnable的多线程编程。本次我们可以把屏幕看成是一个资源,这个资源被两个线程所共用,

/*
#include <iostream>
#include <windows.h>
using namespace std;

DWORD WINAPI Fun(LPVOID lpParamter)
{
      while(1)
      {
          cout<<"Fun display!"<<endl;
          Sleep(1000);// 1000 表示一秒
      }
}

int main()
{
    HANDLE hThread = CreateThread(NULL, 0, Fun, NULL, 0, NULL);
    CloseHandle(hThread);
    while(1)
    {
        cout<<"main display!"<<endl;
        Sleep(2000);
    }
    return 0;
}// 出现连续多个空行或不换行问题
我们可以把屏幕看成是一个资源,这个资源被两个线程所共用,加入当Fun函数输出了Fun display!后,
//将要输出endl(也就是清空缓冲区并换行,在这里我们可以不用理解什么事缓冲区),但此时main函数
//确得到了运行的机会,此时Fun函数还没有来得及输出换行就把CPU让给了main函数,而这时main函数
//就直接在Fun display!后输出main display!
*/
// 解决方法一:
/*
#include <iostream>
#include <windows.h>
using namespace std;

DWORD WINAPI Fun(LPVOID lpParamter)
{
    while(true)
    {
        cout << "Fun display!\n";
        Sleep(1000);
    }
}

int main()
{
    HANDLE hThread = CreateThread(NULL, 0, Fun, NULL, 0, NULL);
    CloseHandle(hThread);
    while(true)
    {
        cout << "Main display!\n";
        Sleep(2000);
    }
    return 0;
}
*/
// 解决方法二:实现交替运行,这次才是从根本上解决了问题,实现了多线程共享资源
/*
#include <iostream>
#include <windows.h>
using namespace std;
HANDLE hMutex;
DWORD WINAPI Fun(LPVOID lpParamter)
{
    while(true)
    {
        WaitForSingleObject(hMutex, INFINITE);
        cout << "Fun display!" << endl;
        Sleep(1000);
        ReleaseMutex(hMutex);
    }
}

int main()
{
    HANDLE hThread = CreateThread(NULL, 0, Fun, NULL, 0, NULL);
    hMutex = CreateMutex(NULL, FALSE, "aa");
    cout << hThread << "  " << hMutex << endl;
    CloseHandle(hThread);
    while(true)
    {
        WaitForSingleObject(hMutex, INFINITE);
        cout<<"main display!!!"<<endl;
        Sleep(2000);
        ReleaseMutex(hMutex);
    }
    return 0;
}

时间: 2024-12-24 10:06:24

多线程编程 之 入门篇的相关文章

java多线程编程从入门到卓越(超详细总结)

导读:java多线程编程不太熟?或是听说过?或是想复习一下?找不到好的文章?别担心我给你们又安利一波,文章内容很全,并且考虑到很多开发中遇到的问题和解决方案.循环渐进,通俗易懂,文章较长,建议收藏再看! 往期精彩放送:一文搞定Java的输入输出流等常见流 一文搞定Java集合类,你还在为Java集合类而烦恼吗? 文章目录 1.多线程的概念 2.多线程并发 3.多线程程序设计 继承Thread类创建线程 新建类实现Runnable接口创建线程 改进(匿名内部类方式) 获取线程的名字和当前线程对象

Java多线程编程(基础篇)

一.进程和线程的区别: 进程:当前计算机正在运行的程序,进程是cpu分配资源的基本单位,一个进程至少有一个线程. 线程: 计算机中任务调度和最小的执行单元,一个线程也被称为轻量级进程. Java多线程:在单个程序运作的过程中同时运作多个线程,完成不同的工作,称为多线程. 引入线程的好处:Java虚拟机允许应用程序并发的运行多个线程,引入线程可以减少程序并发时的cpu的开销. 二.Java的运行状态图: 初始状态(被创建):创建一个Thread对象,但还未调用start()启动线程时,线程处于初始

转载自~浮云比翼:Step by Step:Linux C多线程编程入门(基本API及多线程的同步与互斥)

Step by Step:Linux C多线程编程入门(基本API及多线程的同步与互斥) 介绍:什么是线程,线程的优点是什么 线程在Unix系统下,通常被称为轻量级的进程,线程虽然不是进程,但却可以看作是Unix进程的表亲,同一进程中的多条线程将共享该进程中的全部系统资源,如虚拟地址空间,文件描述符和信号处理等等.但同一进程中的多个线程有各自的调用栈(call stack),自己的寄存器环境(register context),自己的线程本地存储(thread-local storage). 一

PC游戏编程(入门篇)(前言写的很不错)

PC游戏编程(入门篇) 第一章 基石 1. 1 BOSS登场--GAF简介 第二章 2D图形程式初体验 2.l 饮水思源--第一个"游戏"程式 2.2 知其所以然一一2D图形学基础 2.3 进入图形世界的钥匙--GAFDDraw 2.4 2D图像的本质--图层表面 2.5 场景的秘密--背景卷动 2.6 诱惑--来自"精灵"的问候 2.7 餐后甜点--GAFApp/GAFDDraw的其他法宝 第三章 塞壬的歌声魔力和第三类接触 3.1 1,2,3--计算机音乐概述

Android多线程编程之线程池学习篇(一)

Android多线程编程之线程池学习篇(一) 一.前言 Android应用开发中多线程编程应用比较广泛,而应用比较多的是ThreadPoolExecutor,AsyncTask,IntentService,HandlerThread,AsyncTaskLoader等,为了更详细的分析每一种实现方式,将单独成篇分析.后续篇章中可能涉及到线程池的知识,特此本篇分析为何使用线程池,如何使用线程池以及线程池的使用原理. 二.Thread Pool基础 进程代表一个运行中的程序,一个运行中的Android

socket 网络编程快速入门(二)教你编写基于UDP/TCP的服务端多线程通信

在上一篇博文中,我们介绍了利用socket进行简单的UDP/TCP的服务端和客户端的通信. (一) 在基于UDP的程序中,你有没有想过,如果我的这台主机在通讯的时候要求既能够收到别的主机发来的数据,又能够自己向目的主机发出数据,该怎样实现?也就是说需要两个while循环同时进行.答案是使用多线程,一个线程用于接受数据,另一个线程用来发送数据.接下来我们介绍WinSock的多线程编程. 多线程的实现我们使用_beginthread()函数: uintptr_t _beginthread( void

8.15_Linux之bash shell脚本编程入门篇(二)以及文件查找和压缩的使用

bash shell脚本编程入门篇(二) read命令的使用 作用: 使用read来把输入值分配给一个或多个shell变量: -p指定要显示的提示 -t TIMEOUT read从标准输入中读取值,给每个单词分配一个变量,所有剩余单词都被分配给最后一个变量 EX.read -p "Enter a filename:" FILE 条件选择之if的使用 if的作用:选择执行(注意:if语句可嵌套) 单分支 if 判断条件;then 条件为真的分支代码 fi EX.单分支案例 双分支 if

8.17_Linux之bash shell脚本编程入门篇(三)之循环以及函数function的使用

bash shell脚本编程入门篇(三)之循环 什么是循环执行? 将某代码段重复运行多次 重复运行多少次: 循环次数事先已知 循环次数事先未知 有进入条件和退出条件 相关命令:for, while, until,selet, for命令的使用 作用: 依次将列表中的元素赋值给"变量名"; 每次赋值后即执行一次循环体; 直到列表中的元素耗尽,循环结束 命令格式: for 变量名 in 列表; do 循环体(正常执行的执行命令) 语句1 语句2 语句3 ... done 列表生成方式: (

Java多线程编程实战指南(设计模式篇,黄文海)-之管道线模式

不得不说,本人工作上很少有使用多线程编程技术的地方.由于本人工作上经常使用的是类似SSH等框架搭建MVC架构,所以更加习惯于编写一些优秀程序员所唾弃的样板式的代码.最近看了文海的多线程编程实战指南,瞬间眼前一亮.觉得有很多自己可以学习的,事实上,我已经在最近的项目中使用上了那本书介绍的两相终止模式.串行封闭模式.生产者消费者模式以及线程池等技术,确实在许多方面改进了我们服务端的吞吐量.说到这里本人吐槽一下,由于是毕业后转行,目前也才工作一年还不满2个月.所以原谅我的得瑟,但我相信我以后会做的更好