首页 > 其他 > 详细

PV 操作实现多任务同步

时间:2021-02-01 17:10:00      阅读:18      评论:0      收藏:0      [点我收藏+]

一篇 naive 的短文。

PV 操作实际上指的是 信号量 的 2 种基本操作,在 POSIX 的实现中,P 操作对应 sem_wait,而 V 操作对应 sem_post

假设有 5 个进程/线程,其运行的先后次序必须要满足以下依赖关系:

技术分享图片

问题:如何使用 PV 操作实现多线程/多进程的同步?

解决办法十分简单。首先给每条边定义相应的信号量 s,初始值为 0 ,然后边的出口需要 V(s),边的入口需要 P(s) ,如下图所示。

技术分享图片

显然,上述过程就是一个简单的 BFS (或者说是拓扑排序?),最终可以轻易翻译成代码:

sem_t a,b,c,d,e,f,g;
sem_init(a, 0, 0);
...
void S1()
{
    sem_post(&a);
    // do S1 job
}
void S2()
{
    sem_wait(&a);
    // do S2 job
    sem_post(&b, &c, &d);
}
// the other processes/threads is similar

以上基本知识足够做一道题了:https://leetcode-cn.com/problems/print-in-order/

PV 操作实现多任务同步

原文:https://www.cnblogs.com/sinkinben/p/14356490.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!