自个人电脑出现多核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); //释放临界区对象所有相关的东西
多线程就介绍到这里了