文章
33
粉丝
253
获赞
1
访问
15.6k
 
process P1() {
    while (true) {
        // 1. 生成一个正整数
        int data = produce(); 
        // 2. 申请空单元:无空单元则阻塞
        P(empty); 
        // 3. 申请互斥访问缓冲区:避免与P2/P3同时操作
        P(mutex); 
        // 4. 将数据放入缓冲区的空单元(具体位置需结合缓冲区存储逻辑,如数组+指针)
        put(data); 
        // 5. 释放缓冲区互斥权
        V(mutex); 
        // 6. 根据数据奇偶性,唤醒对应取数进程
        if (data % 2 == 1) {
            V(odd);  // 有新奇数,唤醒P2
        } else {
            V(even); // 有新偶数,唤醒P3
        }
    }
}
取奇数进程 P2(取出奇数并统计)
process P2() {
    while (true) {
        // 1. 申请奇数:无奇数则阻塞
        P(odd); 
        // 2. 申请互斥访问缓冲区
        P(mutex); 
        // 3. 从缓冲区取出一个奇数
        int data = getodd(); 
        // 4. 统计奇数个数
        countodd(); 
        // 5. 释放缓冲区互斥权
        V(mutex); 
        // 6. 释放一个空单元,唤醒P1(缓冲区多一个空位可生产)
        V(empty); 
    }
}
取偶数进程 P3(取出偶数并统计)
process P3() {
    while (true) {
        // 1. 申请偶数:无偶数则阻塞
        P(even); 
        // 2. 申请互斥访问缓冲区
        P(mutex); 
   ...
    
    
登录后发布评论
暂无评论,来抢沙发