GLib库对核心应用的支持

代码:

/*
 * main.c
 *
 *  Created on: 2024-6-19
 *      Author: root
 */


#include <glib.h>							// 包含GLib函数库
static GMutex *mutex = NULL;
static gboolean t1_end = FALSE;				// 用于结束线程1的标志
static gboolean t2_end = FALSE;				// 用于结束线程2的标志
typedef struct _Arg Arg;
struct _Arg
{
   GMainLoop* loop;						// 该成员为一个GLib实现循环对象
   gint max;
};
void run_1(Arg *arg)							// 线程1函数
{
   int i ;
   for(i=0; i < arg->max; i++) {
      if(g_mutex_trylock(mutex) == FALSE) {
         g_print("%d :thread2 lock mutex target\n", i);
         g_mutex_unlock(mutex);				// 对像解锁
      }
      else
         g_usleep(10);						// 使线程睡眠10秒
   }
   t1_end = TRUE;							// 将该线程结束的标志置为非0
}
void run_2(Arg *arg)							// 线程2函数
{
   int i;
   for(i = 0; i < arg->max; i++) {
      if(g_mutex_trylock(mutex) == FALSE) {
         g_print("%d :thread1 lock mutex target\n", i);
         g_mutex_unlock(mutex);				// 对像解锁
      }
      else
         g_usleep(10);						// 使线程睡眠10秒
   }
   t2_end = TRUE;							// 将该线程结束的标志置为非0
}
void run_3(Arg *arg)							// 线程3函数
{
   for( ; ; ) {								// 建立一个死循环
      if(t1_end && t2_end) {					// 判断线程1和线程2是否已结束
         g_main_loop_quit(arg->loop);			// 退出GLib主循环
         break;
      }
   }
}

int main()
{
   GMainLoop *mloop;						// 创建GLib主循环
   Arg *arg;								// 声明包含指向GLib主循环指针和计数器的结构
   if(!g_thread_supported())					// 判断是否支持GLib线程
      g_thread_init(NULL);
   mloop = g_main_loop_new(NULL, FALSE);		// 开始GLib主循环
   arg = g_new(Arg, 1);
   arg->loop = mloop;
   arg->max = 11;
   mutex = g_mutex_new();					// 创建一个GMutex对象线程池
   g_thread_create(run_1, arg, TRUE, NULL);		// 创建线程1
   g_thread_create(run_2, arg, TRUE, NULL);		// 创建线程2
   g_thread_create(run_3, arg, TRUE, NULL);		// 创建线程3
   g_main_loop_run(mloop);					// 运行主循环
   g_print("thread3exit event cycle\n");
   g_mutex_free(mutex);						// 释放GMutex对象
   g_print("release mutex event\n");
   g_free(arg);								// 清除结构体arg
   g_print("release prar use ram\n");
   return 0;
}

编译

运行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/723967.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

最新版首发 | 手把手教你安装 Vivado2024.1(附安装包)

Q&#xff1a;Vivado出2024版了&#xff01;不知迪普微有没有对应的安装包呢&#xff1f; A&#xff1a;有的&#xff01;回复“Vivado2024.1”即可获得相应安装包哦~ Q&#xff1a;好哒~但是我不会安装&#xff0c;可否安排一期安装教程&#xff1f; A&#xff1a;立马安排&…

网抑云特殊版,登录即永久

前言 今天分享一款特殊版本的音乐软件&#xff0c;相信大家在听网抑云的时候会有两大烦恼&#xff0c; 一是歌曲需要开通VIP才可以收听&#xff0c;不管怎么说也是国内厂商普遍操作 但是第二种烦恼你万万想不到的是&#xff0c;开通了会员后&#xff0c;惊奇的发现&#xff…

数据结构---二叉树的性质总结

第i层上的节点数 证明: 二叉树的最大节点数 证明: 第一层对应2^0个节点, 累加得到 这是一个等比数列 求和公式: 那么这里的n指的是一共有多少个相加 根据从b到a一共有b-a1个可推出 有(k-1)-01个相加 那么结果为: 叶节点与度为2的节点关系 证明: 假设二叉树的总节点数为 NNN…

SSM图书借阅管理系统-计算机毕业设计源码06780

摘 要 大数据时代下&#xff0c;数据呈爆炸式地增长。为了迎合信息化时代的潮流和信息化安全的要求&#xff0c;利用互联网服务于其他行业&#xff0c;促进生产&#xff0c;已经是成为一种势不可挡的趋势。在图书馆的要求下&#xff0c;开发一款整体式结构的图书借阅管理系统&a…

文献阅读:SpaceX:空间转录组学的基因共表达网络估计

文献介绍 「文献题目」 SpaceX: gene co-expression network estimation for spatial transcriptomics 「研究团队」 Veerabhadran Baladandayuthapani&#xff08;美国密歇根大学&#xff09;、Xiang Zhou&#xff08;美国密歇根大学&#xff09; 「发表时间」 2022-09-30 「…

【Redis】基于Redission实现分布式锁(代码实现)

目录 基于Redission实现分布式锁解决商品秒杀超卖的场景&#xff1a; 1.引入依赖&#xff1a; 2.加上redis的配置&#xff1a; 3.添加配置类&#xff1a; 4.编写代码实现&#xff1a; 5.模拟服务器分布式集群的情况&#xff1a; 1.右键点击Copy Configuration 2.点击Modi…

智慧路灯:照亮未来城市的智慧之光

智慧路灯&#xff0c;顾名思义&#xff0c;是在传统路灯基础上集成物联网、大数据、云计算、人工智能等现代信息技术的新型照明系统。它不仅提供节能高效的照明服务&#xff0c;更成为城市信息采集、传输、发布的载体&#xff0c;以及多种增值服务的平台。 核心功能与技术创新 …

Cookie-SameSite属性 前端请求不带cookie的问题解决方案

最近遇到了前端请求后端不带cookie的问题&#xff0c; 请求时header里面就是没有cookie 查看响应应该是这个问题 SameSite是一个cookie属性&#xff0c;用于控制浏览器是否在跨站点请求中发送cookie。它有三个可能的值&#xff1a; 1. Strict&#xff08;严格模式&#xff09…

LUA移植到STM32F4,移植REPL,通过RTT Viewer交互

概述 站内移植LUA多数是使用C函数调用LUA&#xff0c;并没有移植REPL交互端口 本文将REPL也移植进去&#xff0c;做了简单的适配 LUA源码使用标准C库函数&#xff0c;如fgets&#xff0c;fwrite等&#xff0c;在嵌入式环境中要使用fgets&#xff0c;fwrite等C库函数&#xff…

【MATLAB源码-第227期】基于matlab的北方苍鹰优化算法(NGO)机器人栅格路径规划,输出做短路径图和适应度曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 鼠群优化算法&#xff08;Rat Swarm Optimization, RSO&#xff09; 简介 鼠群优化算法&#xff08;Rat Swarm Optimization, RSO&#xff09;是一种模仿鼠类群体觅食行为的优化算法。该算法属于群体智能算法&#xff0c;通…

mysql密码过期的修改(Your password has expired. ..)

参考文章&#xff1a;mysql密码过期的修改方法&#xff08;your password has expired&#xff09;_我是知青-RuoYi 若依 (csdn.net) 问题&#xff1a;Your password has expired. To log inyou must change it using a clientthat supports expired passwords. 解决方式&…

代码随想录第28天|回溯算法

491. 非递减子序列 思路: 不可以排序, 否则会改变元素的顺序对收获的结果有要求, num.size() > 2, 且 num[i - 1] < num[i]需要进行去重, 不能使用排序后的方法去重每一层可用 unordered_set 去重组合问题, for 遍历需要标记起始位置 bug: 一定要先判断元素是否重复, …

【干货】什么是客户裂变系统?它如何帮助saas企业实现业绩转化?

在数字化时代&#xff0c;客户裂变系统已成为SaaS企业实现业绩转化的重要工具。简而言之&#xff0c;客户裂变系统是一种通过现有客户吸引更多新客户的策略。 什么是客户裂变系统&#xff1f; 该系统基于用户行为和数据分析&#xff0c;通过精心设计的激励机制&#xff0c;如…

王思聪隐形女儿曝光

王思聪"隐形"女儿曝光&#xff01;黄一鸣独自面对怀孕风波&#xff0c;坚持生下爱情结晶近日&#xff0c;娱乐圈掀起了一场惊天波澜&#xff01;前王思聪绯闻女友黄一鸣在接受专访时&#xff0c;大胆揭露了她与王思聪之间的爱恨纠葛&#xff0c;并首度公开承认&#…

Suno AI如何解决制作多语言混合的歌曲~

导读 你想不想制作一首有中文和粤语混合的歌曲&#xff1f; 你想不想制作一首有中文和日语混合的歌曲&#xff1f; 你想不想制作一首有中文和英语混合的歌曲&#xff1f; 如果你想不知道怎么操作&#xff0c;可以阅读下本文。 说明 本文让AI唱一首中文和日语混合的歌曲&am…

OpenCV中的圆形标靶检测——findCirclesGrid()(三)

前面说到cv::findCirclesGrid2()内部先使用SimpleBlobDetector进行圆斑检测,然后使用CirclesGridClusterFinder算法类执行基于层次聚类的标靶检测。如下图所示,由于噪声的影响,SimpleBlobDetector检出的标靶可能包含噪声。 而CirclesGridClusterFinder算法类会执行基…

【CT】LeetCode手撕—手撕快排

目录 题目1-思路-快排1-1 快排的核心思想快速排序算法步骤优美的调整区间 1-2 ⭐快排的实现 2- 实现⭐912. 排序数组——题解思路 3- ACM 实现 题目 原题连接&#xff1a;912. 排序数组 1-思路-快排 1-1 快排的核心思想 选择一个基准 基准左侧的元素都小于该元素基准右侧的元…

数据分析必备:一步步教你如何用matplotlib做数据可视化(6)

1、Matplotlib 网格 axes对象的grid()函数将图中网格的可见性设置为on或off。还可以显示网格的主要/次要(或两者)刻度。另外&#xff0c;可以在grid()函数中设置color&#xff0c;linestyle和linewidth属性。 参考以下示例代码 import matplotlib.pyplot as plt import numpy…

GLib库内存块数据类型简单用法

代码; #include <glib.h> int main() {GMemChunk *chunk; // 定义内存块gchar *mem[10]; // 定义指向原子的指针数组gint i, j;chunk g_mem_chunk_new( // 创建内存块"Test MemChunk", // 名称5, // 原子的长度50, …