当前位置: 首页 > article >正文

SDL线程

文章目录

    • SDL线程相关

SDL线程相关

  • SDL线程创建:SDL_CreateThread
  • SDL线程等待: SDL_WaitThread
  • SDL互斥锁 :SDL_CreateMutex/SDL_DestoryMutex
  • SDL锁定互斥: SDL_LockMutex/SDL_UnlockMutex
  • SDL条件变量:SDL_CreateCond/SDL_DestoryCond
  • SDL条件变量 等待通知: SDL_CondWait/SDL_CondSingal

#include <SDL.h>
#include <stdio.h>

SDL_mutex *s_lock = NULL;
SDL_cond *s_cond = NULL;

int thread_work(void *arg) {
    SDL_LockMutex(s_lock);
    printf("                <============thread_work sleep\n");
    sleep(10); // 用来测试获取锁
    printf("                <============thread_work wait\n");
    // 释放s_lock资源,并等待signal。之所以释放s_lock是让别的线程能够获取到s_lock
    SDL_CondWait(s_cond, s_lock); // 另一个线程(1)发送signal和(2)释放lock后,这个函数退出

    printf("                <===========thread_work receive signal, continue to do ~_~!!!\n");
    printf("                <===========thread_work end\n");
    SDL_UnlockMutex(s_lock);
    return 0;
}

#undef main
int main() {
    // 锁
    s_lock = SDL_CreateMutex();
    // 条件变量
    s_cond = SDL_CreateCond();
    SDL_Thread *t = SDL_CreateThread(thread_work, "thread_work", NULL);
    if (!t) {
        printf("  %s", SDL_GetError);
        return -1;
    }

    for (int i = 0; i < 2; i++) {
        sleep(2);
        printf("main execute =====>\n");
    }
    printf("main SDL_LockMutex(s_lock) before ====================>\n");
    SDL_LockMutex(s_lock); // 获取锁,但是子线程还拿着锁
    printf("main ready send signal====================>\n");
    printf("main SDL_CondSignal(s_cond) before ====================>\n");
    SDL_CondSignal(s_cond); // 发送信号,唤醒等待的线程
    printf("main SDL_CondSignal(s_cond) after ====================>\n");
    sleep(10);
    SDL_UnlockMutex(s_lock); // 释放锁,让其他线程可以拿到锁
    printf("main SDL_UnlockMutex(s_lock) after ====================>\n");

    SDL_WaitThread(t, NULL);
    SDL_DestroyMutex(s_lock);
    SDL_DestroyCond(s_cond);

    return 0;
}

在这里插入图片描述

这里面的信号量什么的 和 规范的那一套逻辑设计的是一样的
之前学过线程信号量相关的知识 在这里也是更换了一下函数

代码的主要逻辑是
创建子线程 子线程先拿到锁 休眠10s后 释放锁并等待信号量
主线程拿到锁 发送信号量 唤醒子线程 休眠10s后 释放锁
子线程拿到锁 输出文本并释放锁
主线程等待子线程结束后 结束流程


http://www.kler.cn/a/389811.html

相关文章:

  • MySQL Workbench导入数据比mysql命令行慢
  • 编译ffmpeg动态库时设置RPATH为$ORIGIN
  • 探索 JNI - Rust 与 Java 互调实战
  • 【MATLAB代码】二维平面上的TDOA,使用加权最小二乘法,不限制锚点数量,代码可复制粘贴
  • 【MySQL】数据库知识突破:数据类型全解析与详解
  • R语言机器学习与临床预测模型69--机器学习模型解释利器:SHAP
  • 了解什么是数据库(简介)
  • 数据结构与算法:双指针之“最长连续不重复子序列” +位运算之“求二进制中第k个数字”、“求二进制表示”、“二进制中1的个数” +整数离散化
  • 在PyCharm中打包Python项目并将其运行到服务器上的方法
  • 15分钟学 Go 第 47 天 :并发进阶——深入了解Go语言的并发模型!
  • 【Go】-gRPC入门
  • gitlab ci/cd搭建及使用笔记
  • 高效工位管理:Spring Boot企业级系统
  • 【K8S系列 】在K8S集群怎么查看各个pod占用的资源大小与详细解决方案【已解决】
  • itextpdf打印A5的问题
  • 【一步步开发AI运动小程序】二十一、如果将AI运动项目配置持久化到后端?
  • 【非关系型数据库】【IOT设备】InfluxDB、TimescaleDB、Cassandra和MongoDB
  • Qml 中的那些坑(七)---ComboBox嵌入Popup时,滚动内容超过其可见区域不会关闭ComboBox弹窗
  • C++ | Leetcode C++题解之第559题N叉树的最大深度
  • 蓝牙 SPP 协议详解及 Android 实现
  • 《深入理解 == 与 equals ():Java 中对象比较的奥秘》
  • GIN:逼近WL-test的GNN架构
  • 分布式数据库:深入探讨架构、挑战与未来趋势
  • 鸿蒙Flutter实战:13-鸿蒙应用打包上架流程
  • 随堂测微信小程序ssm+论文源码调试讲解
  • MongoDB 详解:深入理解与探索