C中线程之间的确定性同步

时间:2014-01-07 10:22:14

标签: c windows multithreading synchronization pthreads

我的问题似乎是一个非常愚蠢的问题,但在C中却得不到很好的支持。

我需要的工作管理环境具有以下结构:

  • 主线程(协调器)启动了许多独立线程;
  • 每个从属线程都有一个“按需单个作业”语义,这意味着有一个函数在master请求时启动;
  • 作业相互依赖,因此必须通知主线程已完成作业执行;
  • 应该只激活一次而不锁定主页(可能会同时处理更多作业图);
  • 线程未被清理,因此每个线程的功能都包含在循环结构中:

    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对于伪代码抱歉,它只是为了介绍交互模式,而不是用代码重载问题

0 个答案:

没有答案