我的问题似乎是一个非常愚蠢的问题,但在C中却得不到很好的支持。
我需要的工作管理环境具有以下结构:
线程未被清理,因此每个线程的功能都包含在循环结构中:
initJob();
while (!terminated) {
waitForActivation();
executeJob();
reportCompletion();
}
完美地,master将以简化形式激活作业并等待其完成:
activateJob(jobId);
T = setTimer(deadline);
waitFor(T|completionReport); // select() or similar call on two conditions
// execute some action depending on timeout or completion report
问题是,在C和pthreads / windows线程中,我找不到一种可靠的方法来指示激活/完成主控。例如,每个线程使用一个互斥锁并不能保证,reportCompletion()
执行后waitForActivation()
将不会再次成功。
我正在寻找的解决方案应至少兼容linux / windows(意味着在两种环境中都有支持相同行为的机制)。
当前实现使用三个互斥体,它们不处理最后期限,在终止作业时引发问题,并且对于这样的任务来说似乎过于复杂(我仍然可以在必要时发布)。
PS我似乎彻底搜索了这些问题,但不确定是否制定了正确的搜索词。这是我的第一篇文章,对于可读性和其他问题感到遗憾。
PPS对于伪代码抱歉,它只是为了介绍交互模式,而不是用代码重载问题