Win32下多核多线程编程

我们通常写的程序都是单线程的,当程序运行一个任务时,我们只能等待,什么也干不了,多线程的存在十分必要。然而,多线程的运用不止于此,现在多核已经十分普及,在大运算量的情况下,多个线程并行运行于多核会使运算的速度倍增,多核多线程的程序具有很大的优势。

不同于java语言,C/C++语言本身并不支持多线程,要做多线程的话要用到系统的API函数。下面讲一种多线程的程序的结构:
首先,要有一个线程函数,比如:
UINT Threadproc(LPVOID param);
它接受一个空类型的长指针,可以通过这个伟参给线程函数。
然后,需要一个信号量(Semaphore),这个信号号必须是全局都能访问得到的,用它来控制同时运行的线程数。每创建一个线程,信号量减1;每运行完一个线程,信号量加1。每一个线程在运行之前要向信号量申请资源,结束之后释放资源。如果当前没有资源了,线程需要等待。
再然后,一个主函数用AfxBeginThread()来启动多线程。
下面是用VS2005编程的一个示例工程,主要代码在Thread3View.cpp中,可以参考一下,非常容易理解。
点击下载多线程示例程序代码
PS:线程是多核间调度的基本单位, Windows会自动分配多核给多个线程,如果想手动指定某个核,可以用CPU亲缘性的函数来解决(类似SetProcessAffinityMask( GetCurrentProcess(), 1 );)。

2 Replies to “Win32下多核多线程编程”

Leave a Reply to kangzjCancel reply