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;
}

单生产单消费

改写多任务

相关推荐
不会就选b31 分钟前
算法日常・每日刷题--<动态规划>3
数据结构·算法
H.莓飛1 小时前
【数据结构】队列_OJ题
linux·数据结构·centos
-dzk-1 小时前
【堆】LC 347.前 K 个高频元素
算法·堆
H.莓飛1 小时前
【数据结构】栈_OJ题
linux·数据结构·算法·centos
Zootopia6262 小时前
多架 eVTOL集群排班调度方案思考
人工智能·算法·数学建模·matlab·动态规划·无人机·evtol
和裕2 小时前
年度框架直供 vs 零散按需采购:定制纸箱采购成本、交付与服务核心区别全对比
大数据·运维·网络·人工智能·算法
朝朝辞暮i2 小时前
C++ 第 13 课:值传递 —— 为什么函数里改了,外面却没变?
java·c++·算法
淡海水2 小时前
02-02-原理篇-分代GC
算法·unity·c#·游戏引擎·.net·gc
平行侠2 小时前
065 B树(B-Tree)
数据结构·b树·树查找
无忧.芙桃3 小时前
C++语言原理与实践(十):vector类的底层实现
开发语言·c++·算法