多线程 请问:什么是user mode ? 什么是kernel mode ? 如果一个线程调用等待函数,从 user mode 进入 kernel mode ,有什么利弊? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 user mode字面的意思就是用户模式,换句话说就是应用层模式,在系统的基础上,建立的一个环境给用户使用,咱们平常的应用程序都是user modekernel mode 字面意思是内核模式,换句话说就是相对底层,接近系统核心的模式,比如驱动程序的开发就是kerenl mode.不明白你的第三个问题,如果只是一般的应用,为什么要进入kernel 等待,没有特别的需要,是没有必要进入kernel mode的,详细资料可以搜索一下 从ring0进入ring3的相关资料 上面说错了应该是这样详细资料可以搜索一下 从ring3进入ring0的相关资料 谢谢就是想知道 kerenl mode 和 user mode 之间的切换都牵扯到什么变化,(比如说控制权 、资源什么的) Example 1:// create a manual-reset eventCEvent g_eventStart(FALSE, TRUE);UINT ThreadProc1(LPVOID pParam){ ::WaitForSingleObject(g_eventStart, INFINITE); ... return 0;}UINT ThreadProc2(LPVOID pParam){ ::WaitForSingleObject(g_eventStart, INFINITE); ... return 0;}问题1 :当 g_eventStart 变成 signaled , 然后 ThreadProc1 或 ThreadProc2 获得后g_eventStart 变成 unsignaled, 是不是在线程执行完毕 g_eventStart 变成 signaled ? 既然是 auto-reset 可不可以用 ResetEvent 设置 g_eventStart ? 不好意思 上面那个写错了 Example 1:// create an auto-reset eventCEvent g_eventStart;UINT ThreadProc1(LPVOID pParam){ ::WaitForSingleObject(g_eventStart, INFINITE); ... return 0;}UINT ThreadProc2(LPVOID pParam){ ::WaitForSingleObject(g_eventStart, INFINITE); ... return 0;}问题1 :当 g_eventStart 变成 signaled , 然后 ThreadProc1 或 ThreadProc2 获得后g_eventStart 变成 unsignaled, 是不是在线程执行完毕 g_eventStart 变成 signaled ? 既然是 auto-reset 可不可以用 ResetEvent 设置 g_eventStart ? 是不是在线程执行完毕 g_eventStart 变成 signaled ? ================不是线程执行完毕,另外,这关user mode 什么事? 既然不是执行完毕 , 那是什么时候变成 signaled ? Example 2:// create a manual-reset eventCEvent g_eventStart(FALSE, TRUE);UINT ThreadProc1(LPVOID pParam){ ::WaitForSingleObject(g_eventStart, INFINITE); ... return 0;}UINT ThreadProc2(LPVOID pParam){ ::WaitForSingleObject(g_eventStart, INFINITE); ... return 0;}问题2 :当 g_eventStart 变成 signaled,是不是 ThreadProc1 或 ThreadProc2 (几乎是)同时执行? 为什么? 如果程序变成这样会怎样 ?UINT ThreadProc1(LPVOID pParam){ ::WaitForSingleObject(g_eventStart, INFINITE); ::ResetEvent(g_eventStart); ... return 0;}UINT ThreadProc2(LPVOID pParam){ ::WaitForSingleObject(g_eventStart, INFINITE); ... return 0;} Windows窗口字符集问题 如何设置listctrl的列宽 MFC 中函数的使用? 初学第一个VC++程序,怎么没有看见”打印“到哪里去啦?谢谢! ADO连接在打开纪录集时报 access violation 错 复杂的ListCtrl 如何美化主框架?? 关于 SetWindowRgn? 关于Acrobat Reader 插件的问题(up有分) 有人用过roseedit吗?就是一个图形界面的编辑器啊! vc2005的使用问题 正则表达式 搜索文件时如何区分搜索到的是目录还是文件
kernel mode 字面意思是内核模式,换句话说就是相对底层,接近系统核心的模式,比如驱动程序的开发就是kerenl mode.不明白你的第三个问题,如果只是一般的应用,为什么要进入kernel 等待,没有特别的需要,是没有必要进入kernel mode的,详细资料可以搜索一下 从ring0进入ring3的相关资料
应该是这样详细资料可以搜索一下 从ring3进入ring0的相关资料
就是想知道 kerenl mode 和 user mode 之间的切换都牵扯到什么变化,(比如说控制权 、资源什么的)
// create a manual-reset event
CEvent g_eventStart(FALSE, TRUE);UINT ThreadProc1(LPVOID pParam)
{
::WaitForSingleObject(g_eventStart, INFINITE); ... return 0;
}UINT ThreadProc2(LPVOID pParam)
{
::WaitForSingleObject(g_eventStart, INFINITE); ... return 0;
}
问题1 :当 g_eventStart 变成 signaled , 然后 ThreadProc1 或 ThreadProc2 获得后g_eventStart 变成 unsignaled,
是不是在线程执行完毕 g_eventStart 变成 signaled ?
既然是 auto-reset 可不可以用 ResetEvent 设置 g_eventStart ?
Example 1:
// create an auto-reset event
CEvent g_eventStart;UINT ThreadProc1(LPVOID pParam)
{
::WaitForSingleObject(g_eventStart, INFINITE); ... return 0;
}UINT ThreadProc2(LPVOID pParam)
{
::WaitForSingleObject(g_eventStart, INFINITE); ... return 0;
}
问题1 :当 g_eventStart 变成 signaled , 然后 ThreadProc1 或 ThreadProc2 获得后g_eventStart 变成 unsignaled,
是不是在线程执行完毕 g_eventStart 变成 signaled ?
既然是 auto-reset 可不可以用 ResetEvent 设置 g_eventStart ?
================
不是线程执行完毕,另外,这关user mode 什么事?
// create a manual-reset event
CEvent g_eventStart(FALSE, TRUE);UINT ThreadProc1(LPVOID pParam)
{
::WaitForSingleObject(g_eventStart, INFINITE); ... return 0;
}UINT ThreadProc2(LPVOID pParam)
{
::WaitForSingleObject(g_eventStart, INFINITE); ... return 0;
}问题2 :当 g_eventStart 变成 signaled,是不是 ThreadProc1 或 ThreadProc2 (几乎是)同时执行? 为什么? 如果程序变成这样会怎样 ?UINT ThreadProc1(LPVOID pParam)
{
::WaitForSingleObject(g_eventStart, INFINITE);
::ResetEvent(g_eventStart);
... return 0;
}UINT ThreadProc2(LPVOID pParam)
{
::WaitForSingleObject(g_eventStart, INFINITE); ... return 0;
}