首页 > 其他分享 >第四章学习笔记

第四章学习笔记

时间:2023-10-29 12:33:37浏览次数:29  
标签:include attr thread 笔记 学习 线程 pthread NULL 第四章

1. 计算导论

计算导论是学习用户级线程的基础。在Unix/Linux系统中,线程是进程的一部分,它们共享相同的地址空间和系统资源。用户级线程是在用户空间管理的线程,而内核级线程是由操作系统内核管理的线程。

2. 线程

线程是程序执行的基本单位,它包括线程的创建、启动、暂停、终止等操作。在C语言中,可以使用pthread库来创建和管理线程。

c #include <pthread.h> #include <stdio.h> void *thread_function(void *arg) { // 线程执行的代码 printf("Hello from thread!\n"); return NULL; } int main() { pthread_t thread_id; pthread_create(&thread_id, NULL, thread_function, NULL); pthread_join(thread_id, NULL); printf("Main thread exiting.\n"); return 0; }

3. 线程操作

线程操作包括线程的创建、销毁、等待等。上面的代码示例中,pthread_create函数用于创建线程,pthread_join函数用于等待线程的结束。

4. 线程管理操作

线程管理操作包括线程的优先级、调度、亲和性等。你可以使用pthread_attr_t来设置线程的属性,例如优先级。

c #include <pthread.h> #include <stdio.h> void *thread_function(void *arg) { // 线程执行的代码 printf("Hello from thread!\n"); return NULL; } int main() { pthread_t thread_id; pthread_attr_t attr; pthread_attr_init(&attr); pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED); pthread_attr_setschedpolicy(&attr, SCHED_FIFO); struct sched_param param; param.sched_priority = 10; pthread_attr_setschedparam(&attr, &param); pthread_create(&thread_id, &attr, thread_function, NULL); pthread_join(thread_id, NULL); printf("Main thread exiting.\n"); return 0; }

5. 线程并行示例程序

线程并行是多线程编程的核心概念,它允许多个线程同时执行任务,提高了系统的并发性能。下面是一个简单的线程并行示例,计算斐波那契数列。

c #include <pthread.h> #include <stdio.h> void *fibonacci(void *arg) { int n = *((int*)arg); int a = 0, b = 1; for (int i = 2; i <= n; i++) { int temp = a + b; a = b; b = temp; } printf("Fibonacci(%d) = %d\n", n, b); return NULL; } int main() { int n1 = 10, n2 = 20; pthread_t thread1, thread2; pthread_create(&thread1, NULL, fibonacci, &n1); pthread_create(&thread2, NULL, fibonacci, &n2); pthread_join(thread1, NULL); pthread_join(thread2, NULL); printf("Main thread exiting.\n"); return 0; }

6. 线程同步

线程同步是多线程编程中的关键问题。当多个线程访问共享资源时,需要使用互斥锁来保护这些资源,以避免竞争条件和数据不一致性。

c #include <pthread.h> #include <stdio.h> pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; void *increment(void *arg) { for (int i = 0; i < 100000; i++) { pthread_mutex_lock(&mutex); // 访问共享资源 pthread_mutex_unlock(&mutex); } return NULL; } int main() { pthread_t thread1, thread2; pthread_create(&thread1, NULL, increment, NULL); pthread_create(&thread2, NULL, increment, NULL); pthread_join(thread1, NULL); pthread_join(thread2, NULL); printf("Main thread exiting.\n"); return 0; }

7. 编程项目

用户级线程的编程项目可以包括开发多线程的应用程序,例如网络服务器、多媒体处理器等。可以使用各种工具和库来简化多线程编程,例如pthreadOpenMP等。

![](/i/l/?n=23&i=blog/2551600/202310/2551600-20231029122620150-1352170866.png) ![](/i/l/?n=23&i=blog/2551600/202310/2551600-20231029122628894-2103372723.png) ![](/i/l/?n=23&i=blog/2551600/202310/2551600-20231029122634100-608120975.png)

标签:include,attr,thread,笔记,学习,线程,pthread,NULL,第四章
From: https://www.cnblogs.com/heweiye/p/17795737.html

相关文章

  • 玉米病害检测:基于深度学习的YOLO模型的应用【玉米病害检测实战】
    随着人工智能技术的快速发展,其在农业领域的应用也越来越广泛。玉米作为重要的粮食作物之一,在生长过程中容易受到各种病害的侵害,这对玉米产量和质量造成了严重的影响。因此,利用人工智能技术对玉米病害进行快速准确的检测和诊断具有重要的意义。本文将介绍基于深度学习的YOLO(YouOnly......
  • 2023-2024-1 20231308 《计算机基础与程序设计》第五周学习总结
    2023-2024-120231308《计算机基础与程序设计》第五周学习总结作业信息这个作业属于哪个课程2023-2024-1-计算机基础与程序设计这个作业要求在哪里2023-2024-1计算机基础与程序设计第五周作业这个作业的目标<关于机器语言与汇编语言,pep9的相关应用,循坏算法的了解......
  • 2023-2024-1 20231403 《计算机基础与程序设计》第五周学习总结
    作业信息这个作业属于哪个课程<班级的链接>(如2022-2023-1-计算机基础与程序设计)这个作业要求在哪里(2023-2024-1计算机基础与程序设计第五周作业)这个作业的目标自学《计算机科学概论》第6章,《C语言程序设计》第4章作业正文https://www.cnblogs.com/lsrmy/p/177......
  • win10安装openocd进行ubuntu远程gdb调试--Apple的学习笔记
    一,win10版本的openocd+stlink调试环境搭建1,在官网下载openocd的win10版本解压即可,arm-none-eabi的win10版本解压即可,然后添加到环境变量。2,stlink连接开发板,且插入stlink。3,打开一个cmd输入命令,然后可以看到正常识别到stlink,且等待gdb的3333端口。openocd-fD:\program\OpenOCD-2......
  • ubuntu18.04安装openocd服务器独立进行gdb调试--Apple的学习笔记
    一,前言之前win10的openocd由于没添加loadelf导致无法调试,所以我就在ubuntu中也装了openocd环境,这样就不用依靠win10了。ubntu14.04无法编译openocd,所以换成ubuntu18.04安装openocd。二,ubuntu18.04安装openocd及gdb调试1,下载gitclonegit://git.code.sf.net/p/openocd/codeopenoc......
  • C语言笔记1
    标识符命名规则:1>标识名只能由字母、数字、下划线组成;2>不能以数字开头(只能以字母或下划线开头);3>不能与系统关键字冲突;C语言语法规定:变量要定义在当前代码的最前面extern声明外部符号局部变量的作用域是变量所在的局部范围全局变量的作用域是整个工程    ......
  • 位运算学习笔记 【蒟蒻版】
    位运算学习笔记基本概念:位运算:顾名思义,就是按位运算的意思,一般指二进制下的位运算**"&"按位与运算与运算:两个位都为1时,结果才为1,否则为0例子:100001&101011---------100001代码:100001&101011"|"按位或运算或运算:两个位都为0时,结果才为0,否则为1......
  • 刷题笔记——矩阵(C)
    85.最大矩形-力扣(LeetCode)给定一个仅包含 0 和 1 、大小为 rowsxcols 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。解题思路依次遍历矩阵的每一行,计算每列落在的该行的”1“的个数,那么,本题就转换成了”柱状图的最大面积“。代码实现intlargestRectangleAr......
  • 学习笔记:同余
    同余定义设整数\(m\ne0\)。若\(m\mid(a-b)\),称\(m\)为模数(模),\(a\)同余于\(b\)模\(m\),\(b\)是\(a\)对模\(m\)的剩余。记作\(a\equivb\pmodm\)。否则,\(a\)不同余于\(b\)模\(m\),\(b\)不是\(a\)对模\(m\)的剩余。记作\(a\not\equivb\pmodm\)。这......
  • 算法学习笔记(32): 格路径与计数
    格路径与计数这属于组合数学里面的东西,单独拿出来谈上一谈。最简单的计数:从\((0,0)\)只能向右或者向左走到\((n,m)\)。首先有一个很naive的DP:\(f_{i,j}=f_{i-1,j}+f_{i,j-1}\)。然而如果我们稍微变换一下坐标,旋转45度,那么递推式变为:\(g_{k,j}=g_{k-1......