多线程创建

本文详细解析了在同一进程中多个线程如何共享资源并独立执行程序的不同部分,探讨了线程创建过程及线程间通信的基本原理。通过具体示例代码,展示了线程在Linux系统下的调度机制和执行顺序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概念

所有这些线程在同一个进程中执行同一个程序,但是每个线程在特定时间点上可能分别执行这个程序的不同部分。

创建和被创建的线程同先前一样共享内存空间、文件描述符和其它各种系统资源。例如, 当一个线程修改了一个变量的值,随后其它线程就会看到这个修改过的值。相似的,如果一个线程关闭了一个文件描述符,其它线程也无法从这个文件描述符进行读或写操作。因为一个进程中所有线程只能执行同一个程序,如果任何一个线程调用了一个 exec 函数,所有其它线程就此终止。

创建线程

进程中的每个线程都以线程 ID 标识。在 C 或 C++ 程序中,线程 ID 被表示为pthread_t 类型的值。
pthread_t thread_id; //定义一个线程id
函数 pthread_create 负责创建新线程。你需要给它提供如下信息:

  1. 一个指向 pthread_t 类型变量的指针;新线程的线程 ID 将存储在这里。
  2. 一个指向线程属性(thread attribute) 对象的指针。这个对象控制着新线程与程序其它部分交互的具体细节。如果传递 NULL 作为线程属性,新线程将被赋予一组默认线程属性。
  3. 一个指向线程函数的指针。这是一个普通的函数指针,类型如下:void* () (void)
  4. 一个线程参数,类型 void*。不论你传递什么值作为这个参数,当线程开始执行的时候,它都会被直接传递给新的线程。

注意:编译带有线程相关头文件时,要增加-lpthread的编译选项;如:# gcc -o pthread pthread.c -lpthread


/*================================================================
*   Copyright (C) 2019. All rights reserved.
*        
*   文件名称:pthread.c
*   创 建 者:
*   创建日期:2019年07月30日
*   描    述:
*        
================================================================*/
         
         
#include <pthread.h>
#include <stdio.h>
         
pthread_mutex_t rd = PTHREAD_MUTEX_INITIALIZER;
         
/* 打印字符'x',到标准错误输出 */
void* print_xs(void* unused) {
    while(1) {
       // pthread_mutex_lock(&rd);
        printf("x\n");
        usleep(1000);                                           
        //pthread_mutex_unlock(&rd);
    }    
     
    return NULL;
}        
         
/* 主程序 */
int main() {
    pthread_t thread_id;
    
    /* 构造新线程,新线程将执行print_xs函数 */
    pthread_create(&thread_id, NULL, print_xs, NULL);
    sleep(1);
    /* 不断输出字符'o'到标准错误输出  */
    while(1){
        //pthread_mutex_lock(&rd);
        usleep(1000);
        printf("o\n");
        usleep(1000);
        //pthread_mutex_unlock(&rd);
         
    }    
    
    pthread_join(thread_id, NULL);
    
    return 0;
}        

函数意义就是分别针对2个线程,观察他们执行的顺序,由于linux是在不断调度这2个线程的,所以看到的现象应该是’o’、‘x’交替输出。但在上述代码没有增加sleep之前,只能看到’o’的输出而看不到’x’的输出,增加了延时后,可以看到输出一段’x’输出一段’o’,原因是由于线程在系统中是以抢占时间片的方式来执行,没有增加sleep时,可能print_xs的线程抢到时间片了,但是由于打印的原因没有看出来,增加sleep,使这2个线程都有充分的时间进行时间片调度,才能看到效果;
在这里插入图片描述

内容概要:该论文聚焦于T2WI核磁共振图像超分辨率问题,提出了一种利用T1WI模态作为辅助信息的跨模态解决方案。其主要贡献包括:提出基于高频信息约束的网络框架,通过主干特征提取分支和高频结构先验建模分支结合Transformer模块和注意力机制有效重建高频细节;设计渐进式特征匹配融合框架,采用多阶段相似特征匹配算法提高匹配鲁棒性;引入模型量化技术降低推理资源需求。实验结果表明,该方法不仅提高了超分辨率性能,还保持了图像质量。 适合人群:从事医学图像处理、计算机视觉领域的研究人员和工程师,尤其是对核磁共振图像超分辨率感兴趣的学者和技术开发者。 使用场景及目标:①适用于需要提升T2WI核磁共振图像分辨率的应用场景;②目标是通过跨模态信息融合提高图像质量,解决传统单模态方法难以克服的高频细节丢失问题;③为临床诊断提供更高质量的影像资料,帮助医生更准确地识别病灶。 其他说明:论文不仅提供了详细的网络架构设计与实现代码,还深入探讨了跨模态噪声的本质、高频信息约束的实现方式以及渐进式特征匹配的具体过程。此外,作者还对模型进行了量化处理,使得该方法可以在资源受限环境下高效运行。阅读时应重点关注论文中提到的技术创新点及其背后的原理,理解如何通过跨模态信息融合提升图像重建效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值