线程

线程

pthread_create() pthread_exit()

创建了线程之后,地址空间不变化,但是内核态增加了一个pcb,原进程变为主进程,创建出的为子进程。两线程共享地址空间,有各自独立的pcb,子线程的pcb是拷贝的主线程的
用户区:

  • .text //代码段
  • .bss //未初始化的全局变量
  • .data //初始化的全局变量
  • 动态库加载区
  • 环境变量
  • 命令行参数

用户区只有栈是不共享的,栈是平均分配
通信:

  • 全局变量,堆

Linux中:
线程就是轻量级的进程
对于内核来说,线程就是进程

相关概念:
线程号:线程号给内核看,查看方式ps -Lf pid,pid为进程号
线程ID:不同于线程号

一个单独的进程可以看成一个线程

多线程和多进程的区别:

  • 多进程(父子):
    – 共享的资源:代码,文件描述符,内存映射区
  • 多线程:
    – 共享的资源:堆,全局变量
    – 节省资源
    主线程退出,子线程立即结束

函数原型:

int pthread_create(
	pthread_t *thread,//线程ID,无符号长整形,传出的参数
	const pthread_attr_t *attr,//线程属性,NULL,分离,设置分离可以自己释放自己的pcb
	void *(*start_routine)(void *),//线程处理函数
	void *arg//线程处理函数参数
);

函数描述:创建线程
线程属性:
*
返回值:成功返回0,错误返回错误号,不能使用perror打印错误


函数原型:void pthread_exit(void *retval);
函数功能:单个线程退出(可以退出主线程)
函数参数:传出退出信息,必须指向全局
返回值:空

– 使用exit()会使得两个线程同时退出,return也行


函数原型:int pthread_join(pthread_t thread, void **retval);
函数功能:阻塞等待子线程的退出,获取线程退出状态
函数参数:要回收的线程ID 读取线程退出状态(传一级指针的地址)
指向的地址和pthread_exit()参数指向的地址是一样的


函数原型:int pthread_detach(pthread_t thread);
函数功能:线程分离–子线程可以自己回收pcb(也可以在创建的时候指定)


函数原型:int pthread_cancel(pthread_t thread)
函数功能:杀死(取消)线程,必须做过一次系统调用(调用系统函数)
pthread_testcancel:设置取消点


函数原型

int pthread_equal(pthread_t t1, pthread_t t2);//预留函数,基本不用

通过属性设置线程分离:
1.线程属性类型:pthread_attr_t attr;
2.线程属性操作函数:

  • 对线程属性变量的初始化
    • int pthread_attr_init(pthread_attr_t* attr);
  • 设置线程分离属性
    • int pthread_attr_setdetachstate(
      pthread_attr_t *attr,
      int detachstate
      );
    • 参数:
      • attr:线程属性
      • detachstate:
        • PTHREAD_CRAETE_DETACHED(分离)
        • PTHREAD_CREATE_JOINABLE(非分离)
  • 释放线程资源函数
    • int pthread_attr_destroy(pthread_attr_t *attr);
python+opencv简谱识别音频生成系统源码含GUI界面+详细运行教程+数据 一、项目简介 提取简谱中的音乐信息,依据识别到的信息生成midi文件。 Extract music information from musical scores and generate a midi file according to it. 二、项目运行环境 python=3.11.1 第三方库依赖 opencv-python=4.7.0.68 numpy=1.24.1 可以使用命令 pip install -r requirements.txt 来安装所需的第三方库。 三、项目运行步骤 3.1 命令行运行 运行main.py。 输入简谱路径:支持图片或文件夹,相对路径或绝对路径都可以。 输入简谱主音:它通常在第一页的左上角“1=”之后。 输入简谱速度:即每分钟拍数,同在左上角。 选择是否输出程序中间提示信息:请输入Y或N(区分大小写,下同)。 选择匹配精度:请输入L或M或H,对应低/中/高精度,一般而言输入L即可。 选择使用线程数:一般与CPU核数相同即可。虽然python的线程是真正的多线程,但仍能起到加速作用。 估算字符上下间距:这与简谱中符号的密集程度有关,一般来说纵向符号越稀疏,这个值需要设置得越大,范围通常在1.0-2.5。 二值化算法:使用全局阈值则跳过该选项即可,或者也可输入OTSU、采用大津二值化算法。 设置全局阈值:如果上面选择全局阈值则需要手动设置全局阈值,对于.\test.txt中所提样例,使用全局阈值并在后面设置为160即可。 手动调整中间结果:若输入Y/y,则在识别简谱后会暂停代码,并生成一份txt文件,在其中展示识别结果,此时用户可以通过修改这份txt文件来更正识别结果。 如果选择文件夹的话,还可以选择所选文件夹中需要识别的文件以排除干扰
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值