第四章学习笔记

发布时间 2023-10-29 12:27:33作者: 远游

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等。

![](https://img2023.cnblogs.com/blog/2551600/202310/2551600-20231029122234415-190313507.png) ![](https://img2023.cnblogs.com/blog/2551600/202310/2551600-20231029122250175-1297981873.png) ![](https://img2023.cnblogs.com/blog/2551600/202310/2551600-20231029122303146-1745530289.png)