首页
社区
课程
招聘
[求助]XP多线程编程问题
发表于: 2013-10-26 16:23 5132

[求助]XP多线程编程问题

2013-10-26 16:23
5132
#include <Windows.h>
#include <iostream>
using namespace std;
DWORD WINAPI ThreadMuti1(
                                 LPVOID lpParameter
                                 );

DWORD WINAPI ThreadMuti2(
                                                 LPVOID lpParameter
                                 );

DWORD WINAPI ThreadMuti3(
                                                 LPVOID lpParameter
                                 );
DWORD WINAPI ThreadMuti4(

                                                 LPVOID lpParameter
                                 );

DWORD WINAPI ThreadMuti5(
                                                 LPVOID lpParameter
                                 );

DWORD WINAPI ThreadMuti6(
                                                 LPVOID lpParameter
                                 );
void main()
{
        HANDLE HanThread1 = CreateThread(NULL,0,ThreadMuti1,NULL,0,NULL);
        HANDLE HanThread2 = CreateThread(NULL,0,ThreadMuti2,NULL,0,NULL);
        HANDLE HanThread3 = CreateThread(NULL,0,ThreadMuti3,NULL,0,NULL);
        HANDLE HanThread4 = CreateThread(NULL,0,ThreadMuti4,NULL,0,NULL);
        HANDLE HanThread5 = CreateThread(NULL,0,ThreadMuti5,NULL,0,NULL);
        HANDLE HanThread6 = CreateThread(NULL,0,ThreadMuti6,NULL,0,NULL);
        CloseHandle(HanThread1);
        CloseHandle(HanThread2);
        CloseHandle(HanThread3);
        CloseHandle(HanThread4);
        CloseHandle(HanThread5);
        CloseHandle(HanThread6);
//        cout<<"  0  "<<endl;
        Sleep(4000);

}

DWORD WINAPI ThreadMuti1(
                                                LPVOID lpParameter
                                 )
{
        cout<<"   1  "<<endl;
        return 0;
}
DWORD WINAPI ThreadMuti2(
                                                 LPVOID lpParameter
                                 )
{
        cout<<"   2  "<<endl;
        return 0;
}
DWORD WINAPI ThreadMuti3(
                                                 LPVOID lpParameter
                                 )
{
        cout<<"   3  "<<endl;
        return 0;

}
DWORD WINAPI ThreadMuti4(
                                                 LPVOID lpParameter
                                 )
{
        cout<<"   4  "<<endl;
        return 0;
}
DWORD WINAPI ThreadMuti5(
                                                 LPVOID lpParameter
                                 )
{
        cout<<"   5  "<<endl;
        return 0;
}
DWORD WINAPI ThreadMuti6(
                                                 LPVOID lpParameter
                                 )
{
        cout<<"   6  "<<endl;
        return 0;

}

基于Win 32控制台程序。

本机是 4核CPU ,

说明:每一个线程都会输出一个数字, 最后输出的数字的顺序是随机的,有时候是2开头,有时是1开头,
例如:



第一个问题:线程是按照创建顺序运行的吗?

第二个问题:按道理说每一个CPU可以运行一个线程,那么我的4核CPU可以运行4个线程,
为何6个线程都会运行? 难道最后俩个是 时间片 运行吗?

第三个:我的4核CPU 是否只能同时运行 1个主线程+3个副线程?

老油子们速来。

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 217
活跃值: (25)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
小小尝试回答下

线程只是按顺序创建, 不按顺序运行

是每个核运行一个线程(在那个瞬间),  不要执着哪个线程是哪个核在负责....轮到线程的时间片段就给cpu时间

四个核在那个瞬间是运行四个线程

后续, 系统不只有一个程序的线程, 整个系统跑起远不止四条....这样可能就能理解不单单是六个了...的确在那个瞬间只有四个在运行...但跑的很快....每个核给每个线程一瞬间的cpu时间......跑一点这条,马上就去跑别的另一条

为什么随机呢...你想想.....只是顺序创建而已.....每条线程还是在等cpu给他们cpu时间(cpu资源)去运行它....到底谁拿到先这个还算是随机的...
2013-10-26 17:11
0
雪    币: 206
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
cout是线程安全的吗?
2013-10-26 18:11
0
雪    币: 207
活跃值: (39)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
不是  Cout 是Iostream库的一个输出流
2013-10-26 19:40
0
雪    币: 215
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
前几天我调试,需要进入printf函数,里面貌似有lock字样的函数,感觉是线程安全的
2013-10-26 21:36
0
游客
登录 | 注册 方可回帖
返回
//