zoukankan      html  css  js  c++  java
  • 线程与进程有关的概念

      一个进程相当于你写了的一个程序正在内存中运行,而这个进程内至少有一个主线程,C++就是main(),还有辅助线程,当然一旦主线程结束了,辅助线程就都结束了,这样就可以比较清晰地理解,进程是资源分配的基本单位,而线程,是共用进程中的资源的,同时操作系统就给了进程一部分内存堆和cpu处理的时间。

      下面的函数可以观察两个辅助线程的运行情况

      下面的程序有两个辅助线程,没有临界资源

    #include <windows.h>
    #include<stdio.h>
    #include<stdlib.h>
    #include<iostream>
    #include<string.h>
    #include<assert.h>
    #include<windows.h>
    #include <process.h>
    #include<iostream>
    using namespace std;
    
    DWORD WINAPI Fun1Proc(LPVOID lpParameter);//thread data
    DWORD WINAPI Fun2Proc(LPVOID lpParameter);//thread data
     
    int index=0;
    int tickets=100;
    HANDLE hMutex;
    void main()
    {
        HANDLE hThread1;
        HANDLE hThread2;
        //创建线程
     
        hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
        hThread2=CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);
        CloseHandle(hThread1);
        CloseHandle(hThread2);
    
        WaitForSingleObject(hMutex,INFINITE);
         
        Sleep(4000);
    }
    //线程1的入口函数
    DWORD WINAPI Fun1Proc(LPVOID lpParameter)//thread data
    {
        while (true)
        {
            if (tickets>0)
            {
                Sleep(10);
                cout<<"thread1 sell ticket :"<<tickets--<<endl;
            }
            else
                break;
        }
     
        return 0;
    }
    //线程2的入口函数
    DWORD WINAPI Fun2Proc(LPVOID lpParameter)//thread data
    {
        while (true)
        {
            if (tickets>0)
            {
                Sleep(1);
                cout<<"thread2 sell ticket :"<<tickets--<<endl;
            }
            else
                break;
        }
         
        return 0;
    }
    View Code

      当一个线程sleep的时候,cpu就去响应其他线程了,这可以说提高了资源利用率

      

      下面的程序有临界资源(原型:两个窗口卖火车票)

    #include <windows.h>
    #include<stdio.h>
    #include<stdlib.h>
    #include<iostream>
    #include<string.h>
    #include<assert.h>
    #include<windows.h>
    #include <process.h>
    #include<iostream>
    using namespace std;
     
    DWORD WINAPI Fun1Proc(LPVOID lpParameter);//thread data
    DWORD WINAPI Fun2Proc(LPVOID lpParameter);//thread data
     
    int index=0;
    int tickets=100;
    HANDLE hMutex;
    void main()
    {
        HANDLE hThread1;
        HANDLE hThread2;
        //创建线程
     
        hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
        hThread2=CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);
        CloseHandle(hThread1);
        CloseHandle(hThread2);
     
        //创建互斥对象
        hMutex=CreateMutex(NULL,TRUE,"tickets");
        ReleaseMutex(hMutex);
        if (hMutex)
        {
            if (ERROR_ALREADY_EXISTS==GetLastError())
            {
                cout<<"only one instance can run!"<<endl;
                return;
            }
        }
        WaitForSingleObject(hMutex,INFINITE);
        ReleaseMutex(hMutex);
        ReleaseMutex(hMutex);
         
        Sleep(4000);
    }
    //线程1的入口函数
    DWORD WINAPI Fun1Proc(LPVOID lpParameter)//thread data
    {
        while (true)
        {
            
            WaitForSingleObject(hMutex,INFINITE);
            
            if (tickets>0)
            {
                printf("thread1 sell ticket :%d
    ",tickets--);
                ReleaseMutex(hMutex);
                Sleep(500);
            }
            else{
                break;
            }    
        }
        return 0;
    }
    //线程2的入口函数
    DWORD WINAPI Fun2Proc(LPVOID lpParameter)//thread data
    {
        while (true)
        {
      
            WaitForSingleObject(hMutex,INFINITE);
            if (tickets>0)
            {
                printf("thread2 sell ticket :%d
    ",tickets--);
                ReleaseMutex(hMutex);
                Sleep(200);
            }
            else
                break;
        }
         
        return 0;
    }
    View Code

      

  • 相关阅读:
    Sass
    将100以内同时能被3和5整除的数输出
    Html小插件
    微信小程序一些demo链接地址
    .net MVC4一个登陆界面加验证
    Zeu.js
    Google 开发的、最好用、功能最强大的网页测速与网站性能分析工具
    .net基本面试题
    C#简单的九九乘法表
    请编程实现一个冒泡排序算法
  • 原文地址:https://www.cnblogs.com/huhuuu/p/3442376.html
Copyright © 2011-2022 走看看