0
点赞
收藏
分享

微信扫一扫

PHP的知识概要

RIOChing 2023-08-04 阅读 80

CreateThread函数:

        该函数用于创建一个新的线程并在其上运行指定的函数,原型如下:

HANDLE CreateThread(
            LPSECURITY_ATTRIBUTES   lpThreadAttributes,
            SIZE_T                  dwStackSize,
            LPTHREAD_START_ROUTINE  lpStartAddress,
            LPVOID                  lpParameter,
            DWORD                   dwCreationFlags,
            LPDWORD                 lpThreadId
        );

 下面是示例:

#include <iostream>
#include <windows.h> //调用windows API的头文件
using namespace std;

//回调函数,格式固定
DWORD WINAPI ThreadProc(PVOID lp){
    //线程的主体
    //…………
    return 0;
};


int main()
{
    CreateThread(NULL, 0, ThreadProc, NULL, 0, 0);

    return 0;
}

ThreadProc函数解释:

        该函数即线程入口,ThreadProc 和 lp一样, 名字随意, ThreadProc函数本身作为CreateThread函数的第三个参数,该函数参数由CreateThread函数的第四个参数传入

    DWORD的本质是 unsigned long
    PVOID的本质是 void*

 

注意:在多线程环境中,全局变量是所有线程共享的,这意味着多个线程可以同时访问和修改这些全局变量。因为线程是并发的,所以当一个线程在执行过程中修改了全局变量的值时,其他线程在访问同一全局变量时可能会读取到这个修改后的值。

如果一个线程使用new在堆上分配了内存,并在线程执行过程中释放了这块内存,那么其他线程在访问这块内存时可能会遇到悬挂指针(dangling pointer)或无效内存访问的问题

因此,在多线程编程中,对于共享的资源,包括全局变量和动态分配的内存(如new操作),必须非常小心。应该通过合适的同步机制(例如互斥锁、条件变量等)来确保多个线程对这些资源的安全访问。这样可以避免潜在的竞态条件和访问无效内存的问题。

在处理动态内存时,最好的做法是由创建它的线程负责释放内存,而不是在其他线程中释放。此外,可以使用智能指针(例如std::shared_ptrstd::unique_ptr)来管理动态内存,这样可以避免手动释放内存的问题。

举报

相关推荐

0 条评论