为什么读

高级操作系统又聊到了并行编程,我想上机实践一下。

第一章 Why Threads?

程序1-1:给出了一个可以并发执行的程序。
多线程状态下,每个线程有自己的栈指针,PC指针,独立的栈。但是Text段、Data段和Heap段是共享的。

程序1-2:利用fork来并发执行,因为是不同的进程,需要初始化共享内存。

程序1-3:解释了fork函数三种返回值,小于0失败,等于0在子进程中,大于在父进程中,值是子进程的pid。

程序1-4:使用pthread并发。看到相比fork版本,套路代码少多了,操作系统要办的事也少了。

Linux下编译要额外链接pthreadgcc 1-4.c -lpthread。我现在Ubuntu22LTS直接编译了不用链接pthread

pthread_create要求调用的函数是(void*) routine(void *arg)签名的。

并发与并行

程序1-5、1-6:用mutex在读写共享数据的时候加锁。这个例子要传一个参数才能启动

程序1-7:工具函数里面检测调用者是哪个线程

程序1-8:用pthread_exit直接停止并返回结果;线程也有可能被cancel

pthread错误处理

大部分是成功时返回零,pthread可能不会设置errno。最后给出了详细的错误处理和简单版本的。

if (rtn = pthread_create(...))
	fprintf(stderr, "Error: pthread_create, %s\n", strerror(rtn)), exit(1);

第二章 Designing Threaded Programs

Pthreads Prgramming - Designing Threaded Programs