2 sam jiang sam_jiang 于 2014.12.16 15:49 提问

信号量和线程同步的问题:线程函数比较耗时

void trigger()
{
UINT uWait=::WaitForSingleObject(IEvent,INFINITE);
if ( uWait == WAIT_OBJECT_0 )
{

processA();

}
}

processA(); 比较耗时,如果它还没有跑完,下一个触发又来了,就马上又开始执行一个processA(); 吗,还是等待上次的执行完成然后再执行?

2个回答

FreeFice
FreeFice   2014.12.16 16:44

PC机上会出现乱序或是假死,也就是说有可能后发的先做,而不是顺序执行,如要顺序执行,则在编程时需要先写阻塞程序,即忙信号,让申请方将任务丢给缓冲池。
作为多CPU多通道并发处理则是事先根据资源情况建立标志信号,当信号为空时就可以提交,如信号全满则进入等待队列,当超时时进入超时处理:或返回、或丢弃、或挂起依策略不同而处理。

VisualEleven
VisualEleven   Ds   Rxr 2014.12.22 16:54

要看你的是怎么调用trigger的?多个线程中调用它吗?

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!