自动重置 也就是1个线程拿到了,其他线程就拿不到了 这样就只有一个可调度线程
可以打个比方2家商店 A B,A有很多棒棒糖n个,B只有1个棒棒糖也就是A是手动,B是自动A店前面排了很多人,也就是1个1个都能买到棒棒糖,也就是多个线程有机会执行B店前面也排了很多人,而只有第一个人能买到棒棒糖,而这个人是不确定的,得看系统的调度,所以第一个人拿了以后,其他人就没有机会了买到棒棒糖了,也就是没有执行的机会了...哈哈 不知道说的恰当不
可以打个比方2家商店 A B,A有很多棒棒糖n个,B只有1个棒棒糖也就是A是手动,B是自动A店前面排了很多人,也就是1个1个都能买到棒棒糖,也就是多个线程有机会执行B店前面也排了很多人,而只有第一个人能买到棒棒糖,而这个人是不确定的,得看系统的调度,所以第一个人拿了以后,其他人就没有机会了买到棒棒糖了,也就是没有执行的机会了...哈哈 不知道说的恰当不
解决方案 »
- CDHtmlDialog不支持Html5/如何更改IE内核版本
- CListCtrl自绘问题
- SSL_connect返回-1的原因?
- 菜鸟请教一个关于头文件的问题
- 请大伙帮忙分析.对话框中为什么会提示"执行系统不支持的操作"
- 工具条按纽为什么不响应
- 獲取CPU信息的問題
- 文档在改动后关闭时会弹出是否保存对话框,但是程序是怎样知道文档是新建的还是打开的……
- 一个调试的问题:VC++ 6。0,在某行语句设断点,按F5开始debug,系统弹出提示框。。。。
- ◆急切求助◆VC6.0和VS2005(VC++.Net)下HotKey等问题。。。
- 急问:基于TCP的socket传输媒体流数据问题的解决
- 请教一个用MFC实现局部缩放功能的实现方法
KeSetEvent( struct event_object *event, BOOL f )
{
//// 此处是内核态,上下文保证不用加锁
event->signal = f;
if(f && ! list_empty(&event->wait_threads) ) {
/// 有线程等待这个event
if( event->isManualReset ) {
/// 遍历所有等待的线程,唤醒
while( event->wait_threads.next != &event->wait_threads ) {
struct thread_object *thd;
thd = container_of( event->wait_threads.next, struct thread_object , list );
list_erase(&thd->list);
KeThreadWakeup( thd );
}
} else {
struct thread_object *thd;
/// 取出第一个线程唤醒
thd = container_of( event->wait_threads.next, struct thread_object , list );
list_erase(&thd->list);
KeThreadWakeup( thd );
event->signal = FALSE; /// 信号自动复位
}
}
return TRUE;
}