公司业务上写了一个小模块,其中有一个功能是需要等待一个线程执行完一个函数之后,在另一个线程做出反应。
之前自己的写法是使用一个循环不断的去监视一个标志值,当标志值变化时候,代表执行完毕。但是这么做的话有一些缺陷,一个是不Sleep的话,那么占用很高的CPU使用率,显然不可行。Sleep的话,则该模块效率提不上来,就算是仅仅1MS,那么模块的速率就降到了一秒100以内了,是不可以被接受的。
陷入这种囧境还是由于自己知识水平限制,在多线程方面积累不足。
后在指导下找到了使用信号量的办法进行多线程的同步工作。
int nRet = MsgQueue_SendNoBlock(pMPRemoteClient->pMsgSend, pMpRemoteSend);
if (nRet != ERR_SUCCESS)
{
NG_free(pMpRemoteSend);
return MP_ERR_FAILED;
}
//等待事件
NG_WaitEvent(pMPRemoteClient->phSlaveEvent[nThreadNo]);
NGtimeEnd = NGClock_GetTicks();
if (NGClock_TimeDiff(NGtimeEnd, NGtimeBegin) >=
pMPRemoteClient->piFunc