简化的线程 API 是用于创建和管理线程的编程接口。它提供了基本的操作,如创建线程和等待线程完成。
spawn(fn)
spawn(fn)
是一个函数,用于创建一个新线程,并立即开始执行。fn
是新线程的入口函数。
-
创建一个入口函数是
fn
的线程,并立即开始执行- 入口函数:
void fn(int tid) { // 线程要执行的代码 }
- 参数
tid
从 1 开始编号:
每个线程有一个唯一的线程ID(tid
),用于标识不同的线程,编号从1开始。
- 入口函数:
-
行为:
- sys_spawn(fn, tid):系统调用,用于实际创建和启动线程。
示例
- C语言示例:
#include <stdio.h> #include <pthread.h> void* thread_function(void* arg) { int tid = *((int*)arg); printf("Thread %d is running\n", tid); return NULL; } int main() { pthread_t thread; int tid = 1; pthread_create(&thread, NULL, thread_function, &tid); pthread_join(thread, NULL); return 0; }
通俗解释:spawn(fn)
就像是你让一个助手去执行某个任务(fn
),你只需要告诉他这个任务是什么,他就会立刻开始工作。
join()
join()
是一个函数,用于等待所有正在运行的线程返回。也可以选择不调用它,直接让主线程继续执行。
- 行为:
- while (done != T) sys_sched():一个循环,等待所有线程完成。如果线程未完成(
done != T
),系统会不断调用调度程序(sys_sched()
)来检查线程状态。
- while (done != T) sys_sched():一个循环,等待所有线程完成。如果线程未完成(
示例
- C语言示例:
#include <stdio.h> #include <pthread.h> void* thread_function(void* arg) { int tid = *((int*)arg); printf("Thread %d is running\n", tid); return NULL; } int main() { pthread_t threads[2]; int tids[2] = {1, 2}; for (int i = 0; i < 2; i++) { pthread_create(&threads[i], NULL, thread_function, &tids[i]); } for (int i = 0; i < 2; i++) { pthread_join(threads[i], NULL); } printf("All threads have finished\n"); return 0; }
通俗解释:join()
就像是你在让多个助手去做任务后,等他们全部完成后你才继续进行下一步工作。你一直在检查他们是否完成,直到所有任务都做完。