【发布时间】:2015-12-11 09:02:32
【问题描述】:
使用多线程计算有 3 个系列。
要访问一个系列,您需要等待信号量,然后您需要知道您是构建线程还是清理线程。
当我拥有多个线程并且所有线程都有可做的事情并且没有无法访问信号量或互斥锁的“浮动”线程时,一切都很好。
如果我确实有太多线程并且没有做什么程序会卡住,除非在 WaitSemRes/WaitMutexRes 之后我杀死了那个线程,但我不想这样做,因为我失去了太多的计算时间。
我只是希望他们继续等待,直到他们有事可做。
我错过了什么吗?
/* Thread is trying to enter specific series, if couldnt - try the next one*/
WaitSemRes = WaitForSingleObject(main_series[series_idx].semaphore, 0L);
if (WaitSemRes == WAIT_OBJECT_0) {
/* Check if i'm the cleaning thread */
if (main_series[series_idx].ready_to_clean) {
/* Catching series mutex to clean it alone */
WaitMutexRes = WaitForSingleObject(main_series[series_idx].mutex, INFINITE);
if (WaitMutexRes == WAIT_OBJECT_0)
// do something //
}
else {
ExitThread(0);
}
// do stuff
else {
ExitThread(0);
}
【问题讨论】:
标签: c windows multithreading mutex semaphore