为什么读
高级操作系统又聊到了并行编程,我想上机实践一下。
第一章 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);