关于线程运行的问题

tankey0909 2012-07-25 10:04:02
请问,为何显示的是(12121212.......1111111111......)而不是我希望的根据时间片(111111122222221111111122222222.....)?
还有,是不是线程调用函数,需要等该线程获得了时间片后,才能进行调用?



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

DWORD WINAPI Fun1Proc(LPVOID lpParameter);

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

CloseHandle(hThread1);
for(int i = 0;i<1000;i++){
cout<<"1"<<endl;

}

}

DWORD WINAPI Fun1Proc(LPVOID lpParameter)
{ for(int i = 0;i<1000;i++){

cout<<"2"<<endl;}

return 0;
}
...全文
76 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
小兵_小白 2012-07-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
引用 1 楼 的回复:

系统分配线程的时间片非常小, 小于打印一个字符的时间
如需同步使用CriticalSection, InitializeCriticalSection


个人认为线程得到的时间片不至于小于打印一个字符的时间
可能是cout非线程安全导致的

另外LZ的是多核环境?
[/Quote]
这个说的在理。
lijianli9 2012-07-26
  • 打赏
  • 举报
回复
cout不是线程安全的,你用多线程方式的lib编译运行。
Gloveing 2012-07-25
  • 打赏
  • 举报
回复
线程调度是内核的事,可以自己进行线程同步
stjay 2012-07-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

系统分配线程的时间片非常小, 小于打印一个字符的时间
如需同步使用CriticalSection, InitializeCriticalSection
[/Quote]

个人认为线程得到的时间片不至于小于打印一个字符的时间
可能是cout非线程安全导致的

另外LZ的是多核环境?
贪玩的老鼠 2012-07-25
  • 打赏
  • 举报
回复
CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
CloseHandle(hThread1);//当你执行到这里时线程不一定执行完了,
但是主线程会继续往下执行。
两个线程同时打印所以就有可能出现上面的情况!
如果你想等线程执行完后在主线程再打印,可用信号量
Yofoo 2012-07-25
  • 打赏
  • 举报
回复
系统分配线程的时间片非常小, 小于打印一个字符的时间
如需同步使用CriticalSection, InitializeCriticalSection

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧