Linux之线程进阶---封装信号量

代码

封装信号量

基于信号量的环形队列

大纲
构造
enqueue

1.预定资源

2.找位置生产

3.释放资源

pop

消费者也类似

cpp 复制代码
int num = 0;
pthread_mutex_t mutex;

int GetNumber()
{
    pthread_mutex_lock(&mutex);
    num++;
    pthread_mutex_unlock(&mutex);
    return num;
}
void *consumerRoutine(void *args)
{
    RingQueue<int> *rq = static_cast<RingQueue<int> *>(args);
    int number = GetNumber();
    while (1)
    {
        int data;
        rq->Pop(&data);
        cout << "con--" << number << "  ";

        cout << "我是消费者,消费了--" << data << endl;
    }
}

void *productorRoutine(void *args)
{
    RingQueue<int> *rq = static_cast<RingQueue<int> *>(args);

    int data = 5;
    int number = GetNumber();
    while (1)
    {
        sleep(1);
        rq->Enqueue(data);
        cout << "pro--" << number << "  ";

        cout << "我是生产者,生产了--" << data++ << endl;
    }
}
int main()
{
    RingQueue<int> *rq = new RingQueue<int>();
    pthread_t c, p;
    pthread_create(&c, nullptr, consumerRoutine, rq);
    pthread_create(&p, nullptr, productorRoutine, rq);
    pthread_join(c, nullptr);
    pthread_join(p, nullptr);
    return 0;
}

单生产单消费

改写多任务

相关推荐
不会就选b1 小时前
算法日常・每日刷题--<BFS&&最短路径>4
算法·宽度优先
旖旎夜光1 小时前
LeetCode 69:x 的平方根(二分查找) —— 题解
数据结构·c++·算法·leetcode·二分查找
艾莉丝努力练剑1 小时前
【AI大模型接入SDK】项目的数据结构设计
数据结构·人工智能·大模型·sdk·文件系统·岗位
sel_91 小时前
【Pytorch】PyTorch 深度学习框架详解:从安装到实战
人工智能·pytorch·深度学习·算法·语言模型
学习星球1 小时前
【LeetCode算法题精讲】图算法精讲——从图遍历到拓扑排序
数据结构·算法·leetcode·图搜索
余额瞒着我当琳1 小时前
C++ list第二讲数据结构修炼:迭代器源码 + 栈队列适配器 + LeetCode 三道高频题
数据结构·c++·list
_Narcissus_1 小时前
常见数论算法笔记
数据结构·c++·算法·高精度·数论·快速幂·质数筛
吴声子夜歌1 小时前
Java面试——数据结构(二)
java·数据结构·面试
CVHub2 小时前
智能标注工具 X-AnyLabeling v4 全面升级:迈向 AI 时代的数据生产基础设施
人工智能·算法·github