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

单生产单消费

改写多任务

相关推荐
wzdark38 分钟前
基于启发式搜索的最优路径规划算法研究4
算法
动词ing44 分钟前
【学习笔记】数据结构栈与队列(栈先进后出+队列先进先出+括号匹配+消消乐模型)
数据结构·笔记·学习
l1t1 小时前
用superpi、tinypi、tpi等工具计算圆周率的比较
c语言·算法
a187927218311 小时前
【算法】链表(二):链表上的双指针——变速、异链与定距,和一份路程账本
数据结构·算法·leetcode·链表·go·指针·环形链表
2601_958352902 小时前
还要写 AEC 算法?0 代码 + 6 个引脚,F-18 让通话清晰度提升 300%
人工智能·算法·降噪消回音
happyprince2 小时前
03-regmix-深刻观-哲学与升华
算法
zcmodeltech2 小时前
火电厂模型能演示冷态启动和故障处理吗?——基于STM32与Modbus RTU的集控实训控制系统设计
数据结构·stm32·单片机·嵌入式硬件·能源
一路向阳~负责的男人2 小时前
运动控制算法收录
算法
czt_java2 小时前
5个核心位运算公式
算法
Doubbbbbbble云3 小时前
区间合并问题的常见算法模式与优化思路4
java·数据结构·算法