笑观多线程

自个人电脑出现多核cpu后,多线程尤为重要,多线能充分的利用cpu,用户也能有更好的体验

下面就来说说多线程

HANDLE hThread1;//线程句柄
//创建线程
hThread1=CreateThread(NULL,          //第一个参数只想结构体的指针NULL为缺省的安全性
                                0,                                            //指定初始栈的大小以字节为单位
                                FUN1proc,                             //表示了线程的首地址是子线程的入口函数
                                NULL,                                    //给线程传参
                                0,                                             //创建的标记
                                NULL);                                   //线程的标识符
                CloseHandle(hThread1);                        //关闭句柄 意思是在不使用线程的时候关闭线程的引用技术
//线程回调函数(回调函数里面可以些任何线程要处理的事务)
DWORD WINAPI FUN1proc(
                LPVOID LpPARANETER
                );
多线程虽好但是有一个缺点那就是不能访问公共资源,如果必须访问的那么就必须得引入同步对象了,

同步对象有个讲究那就是有关联的对象放在一起,这样可以避免线程死锁的问题

同步对象在锁住资源时,因锁住尽量少的代码,锁住尽量少的代码目的在于,被锁住的代码越多,那么其他

线程都在等待,就不是并行而是串行了,多线程就失去了意义了

互斥对象

HANDLE hMutex;   // 使用全局的互斥对象来保证对同一资源的互斥访问与操作这里是tickets
  //创建一个互斥对象,如果成功|返回互斥对象的句柄,否则返回NULL
    hMutex = (CreateMutex(NULL, FALSE, (LPCWSTR)   "tickets" ));

 WaitForSingleObject(hMutex, INFINITE); //如果全局互斥对象是有信号状态则获得该对象,
                                                  //直到调用ReleaseMutex之前,互斥对象是无信号状态,其它线程不能对互斥对象进行访问

                                ReleaseMutex(hMutex);   //将互斥对象设置为有信号状态
当有信号的时候那么其他的线程就可以访问到公共资源了
事件对象

HANDLE  g_hEvent ;   // 使用全局的事件对象来保证对同一资源的互斥访问与操作这里是 g_hEvent
     //创建一个事件对象,如果成功|返回事件对象的句柄,否则返回NULL
            g_hEvent = CreateEvent(NULL,FALSE,FALSE,NULL);
            SetEvent(g_hEvent);//将对象致为有信号状态
   WaitForSingleObject( g_hEvent , INFINITE); //如果全局事件对象是有信号状态则获得该对象
。。。。。。。。。。被锁住的代码。。。。。。。。。
SetEvent(g_hEvent);//将对象致为有信号状态

临界区对象
CRITICAL_SECTION g_cs;//声明临界区对象
    //创建一个事件对象,如果成功|返回事件对象的句柄,否则返回NULL
            InitializeCriticalSection(&g_cs);     //初始化临界区对象
      EnterCriticalSection(&g_cs);//是否可以获取临界区对象的所有权
。。。。。。。。。。被锁住的代码。。。。。。。。。
  LeaveCriticalSection(&g_cs);   //释放临界区对象的所有权

在主函数结束时释放临界区对象相关的东西
   DeleteCriticalSection(&g_cs);  //释放临界区对象所有相关的东西
 多线程就介绍到这里了


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值