关于多线程的问题

来源:百度知道 编辑:UC知道 时间:2024/06/29 01:32:48
多线程起到了并发的作用,并提高了cpu的利用率
而cpu的利用率的计算是使用时间/总时间
这就说明了,cpu是有空闲的时候的.

但是问题来了,我怎么知道我的代码在哪一部分会利用cpu,在哪一部分不会利用cpu呢?如果说整个程序都在利用cpu,那cpu又如何会空闲呢..
希望有高手,能够好好讲讲多线程与cpu的问题

首先,多线程产生的原因就是提高工作效率和资源的有效利用。一个进程中的多个线程可同时运行,进程内的多个线程共享进程资源。

在传统的单线程环境中,计算机只能执行完一个任务后再执行另一个任务,如果系统正在读入一个很大的文件,那么只能等待,而不能终端该任务去做其它的事。

lz提出的问题“我怎么知道我的代码在哪一部分会利用cpu,在哪一部分不会利用cpu呢”,首先,一个多线程的程序,线程是并行执行的,所谓的并行,即一个线程执行,在时间片结束的时候放弃cpu,让另一个线程执行。。。。如果lz确实想知道到底哪一段代码在执行,可以使用断点调试,具体方法是在程序的每个子线程中设断点,然后调试运行。

另外,补充一点,程序运行期间并不一定就在使用cpu的,比如你的程序在读写硬盘,外设期间,当然,还有很多很多情况,cpu是空闲的。

最后附上刚写的一段代码;vc++6.0下编译通过

#include <windows.h>
#include <iostream.h>

DWORD WINAPI Fun1Proc(
LPVOID lpParameter // thread data
);

DWORD WINAPI Fun2Proc(
LPVOID lpParameter // thread data
);

int index = 0;
int tickets = 100;
HANDLE hMutex;

void main()
{
HANDLE hThread1, hThread2;
hThread1 = CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
hThread2 = CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);

CloseHandle(hThread1);
CloseHandle(hThread2);