首页 > 其他分享 >线程练习题

线程练习题

时间:2024-05-29 15:36:09浏览次数:30  
标签:练习题 thread void 主线 线程 pthread main

编写一个程序,主线程中创建一个子线程,容纳后让主线程先退出并返回一个值,子线程接合主线程后输出主线程的退出值,然后子线程退出.

/*******************************************************************
 *
 *	file name:  pthread.c
 *	author	 :  Dazz
 *	date	 :  2024/05/29
 *	function :  练习:编写一个程序,主线程中创建一个子线程,容纳后让主线程
 *              先退出并返回一个值,子线程接合主线程后输出主线程的退出值,
 *              然后子线程退出.
 *
 * 	note	 :  link with -pthread.
 *
 *	CopyRight (c)  2024  [email protected]   All Right Reseverd
 *
 * *****************************************************************/

#include <stdio.h>
#include <pthread.h>

// 用于记录主线程的id
pthread_t thread_main;

// 子线程
void *
func(void *)
{
    // 定义一个变量来接收主线程的返回值
    int *resv;

    /*接收主进程的返回值:int pthread_join(pthread_t thread, void **retval);
    注意pthread_join会阻塞*/
    pthread_join(thread_main, (void **)&resv);

    // 输出主线程的返回值
    printf("this is the pthread of main return :%d\n", *resv);

    // 结束子线程
    pthread_exit(NULL);
}

int main()
{
    // 记录主线程的id
    thread_main = pthread_self();

    // 创建子线程
    pthread_t thread_p;
    pthread_create(&thread_p, NULL, func, NULL);

    // 定义一个变量用于返回的值
    int retval = 77777;

    // 结束主线程,并返回一个值void pthread_exit(void *retval);
    pthread_exit((void *)&retval);

    return 0;
}

标签:练习题,thread,void,主线,线程,pthread,main
From: https://www.cnblogs.com/Dazz24/p/18220385

相关文章

  • 协程 进程 线程的区别
    协程(Coroutine)、进程(Process)和线程(Thread)是三种并发编程的技术,它们在并发控制、资源使用和上下文切换方面有不同的特点和用途。以下是它们的主要区别:进程定义:进程是操作系统分配资源和调度的基本单位。每个进程拥有独立的地址空间、全局变量、堆和栈。资源开销:进程之间的切换......
  • 多线程操作
    【一】threading模块开启线程的两种方式【1】直接调用ThreadfromthreadingimportThreadimporttimedeftask(name):print(f'{name}isstarting')time.sleep(3)print(f'{name}isending')defmain():t=Thread(target=task,args=("dr......
  • 多线程理论
    【一】什么是线程【1】介绍每个进程有一个地址空间,而且默认就有一个控制线程线程就是一条流水线工作的过程所以进程只是用来把资源集中到一起,而线程才是cpu上的执行单位多线程的概念是在一个进程中存在多个控制线程,多个控制线程共享该进程的地址空间,相当于一个车间内......
  • 守护线程
    【一】主线程死亡,子线程未死亡主线程结束运行后不会马上结束,而是等待其他非守护子线程结束之后才会结束如果主线程死亡就代表者主进程也死亡,随之而来的是所有子线程的死亡fromthreadingimportThreadimporttimedefwork(name):print(f'{name}isstarting')......
  • 线程的互斥锁
    【一】未加锁会产生的问题所有子线程都会进行阻塞操作,导致最后的改变只是改了一次fromthreadingimportThreadimporttimemoney=100deftask():globalmoney#模拟获取到车票信息temp=money#模拟网络延迟time.sleep(2)#模拟购票......
  • 多核通讯、线程通讯、进程通讯的区别
    多核通讯多核通讯通常指的是在多处理器系统中,不同核心之间的数据交换和协同工作。多核通讯的实现方式多种多样,包括但不限于高速缓存一致性协议、总线通信、交叉开关等。多核通讯的特点是高速率和低延迟,但实现起来较为复杂,需要硬件和操作系统层面的紧密合作。线程通讯线程通......
  • JAVAEE之线程多进阶(1)_常见的锁策略
    前言 在前面的线程初阶的内容中,我们已经简单介绍了锁,包括synchronized、volatile关键字(详细内容可见:https://blog.csdn.net/2301_80653026/article/details/138818637和https://blog.csdn.net/2301_80653026/article/details/138867371),我们在接下来要讲解的锁策略内容,对......
  • 线程概念浅谈
    1.为什么要有线程我们知道一个集成应用场景需要多个进程同时调度执行各自的功能,那么多进程的本质就是产生多个执行流,每个执行流执行不同的代码和功能,但是一个进程由PCB(task_struct)、进程地址空间、页表、文件描述符表等资源组成,是一个资源集合,创建的开销较大,那么为了满足用户的......
  • Java三种方法实现多线程,继承Thread类,实现Runnable接口,实现Callable接口
    目录线程:继承Thread类:实现Runnable类:实现Callable接口:验证多线程:线程:定义:进程可以同时执行多个任务,每个任务就是线程。举个例子:一个Java程序,如果同时有两个循环同时进行,就是线程。再比如,你用百度网盘,边看视频,边下载。继承Thread类:步骤写在代码里的classmythrea......
  • 如何进行接口优化?如何进行接口优化?多线程的核心参数有哪些?SpringCloud使用了哪些组件?
    在快速迭代的技术领域中,持续地回顾与总结项目经验不仅是个人成长的催化剂,也是智慧积累的关键环节,本次知识积累旨在深入剖析如何进行接口优化?如何进行接口优化?多线程的核心参数有哪些?SpringCloud使用了哪些组件?一、如何优化SQL?优化SQL语句以提高查询效率和性能是一项......