zoukankan      html  css  js  c++  java
  • 多线程笔记1

    第一章:为什么要千头万绪

    1.合作型多任务与抢占型多任务的区别

    2.进程、线程的区别

      进程 = 内存 + 资源

      内存划分:(1)code:程序的可执行部分。

                    (2)data:程序中的所有变量(不包含局部变量),分为全局变量、静态变量。

                    (3)stack:堆栈空间,其中有局部变量。

      资源划分:(1)核心对象

                    (2)USER资源

                    (3)GDI资源

      线程:任何时刻下的状态,被定义在进程的某块内存中,以及cpu寄存器上,其他重要数据存储在进程的共享内存中。

    3.Context switch

      发生中断的时候,CPU 取得目前这个线程的当前状态,也就是把所有寄存器内容拷贝到堆栈之中,再把它从堆栈拷贝到一个CONTEXT 结构;

      要切换不同的线程,操作系统应先切换该线程所隶属之进程的内存,然后恢复该线程放在CONTEXT 结构中的寄存器值。

    4.Race conditions

      链表插入实例。

    5.Atomic operation

    第二章:线程的第一次接触

    1.CreateThread():

    HANDLE CreateThread(
    LPSECURITY_ATTRIBUTES lpThreadAttributes,          //描述新线程security属性,NULL表示使用缺省值。
    DWORD dwStackSize,                                             //新线程堆栈大小,0表示使用缺省大小:1MB
    LPTHREAD_START_ROUTINE lpStartAddress,           // 新线程开始的起始地址,这是一个函数指针
    LPVOID lpParameter,                                             //新线程函数参数
    DWORD dwCreationFlags,                                      //允许产生一个暂时挂起的线程,默认立即执行。
    LPDWORD lpThreadId                                           //新线程ID被传回这里
    );

    2.函数调用约定

      __stdcall, __cdecl, __thiscall, __fastcall, __nakedcall, __pascal

    3.核心对象

      进程,线程,文件,事件,信号量,互斥器,管道

    4.CloseHandle():

    BOOL CloseHandle (
    HANDLE hObject                                      //代表一个已打开对象handle
    );

    5.线程对象与线程的区别

      线程的handle 是指向“线程核心对象”,而不是指向线程本身;“线程核心对象”引用到的那个线程也会令核心对象开启。因此,线程对象的默认引用计数是2。

    6.GetExitCodeThread():

    BOOL GetExitCodeThread(
    HANDLE hThread,                                     //线程handle
    LPDWORD lpExitCode                               //指向一个DWORD,用以接收结束代码
    );

    GetExitCodeThread( )的一个糟糕行为是,当线程还在进行,尚未有所谓结束代码时,它会传回TRUE 表示成功。也就是说你不可能从其返回值中知道“到底是线程还在运行呢,还是它已结束,但返回值为STILL_ACTIVE。

    7.ExitThread():

    VOID ExitThread(
    DWORD dwExitCode                                //dwExitCode 指定此线程之结束代码
    );

  • 相关阅读:
    hw4 打卡
    lab4打卡
    hw3打卡
    lab3打卡
    hw2打卡
    lab2打卡
    hw1打卡
    Java Trie(词典树)实现
    Java HashMap实现
    DFS习题复习(2) DFS的实际应用:括号检测,graph Bipartite及随机生成迷宫
  • 原文地址:https://www.cnblogs.com/programmer-wfq/p/4635286.html
Copyright © 2011-2022 走看看