如何在C中引入sthread.h?替代pthread.h的资料及Windows编译疑问
关于《Operating Systems Principles and Practice 2012》中sthread.h与Windows编译的问题
首先得跟你说清楚,这本书里提到的sthread.h不是系统自带的标准头文件——它是作者为了教学方便,自己实现的一个简化版线程库,用来替代复杂的POSIX pthread库,方便初学者理解线程的核心原理。
怎么获取sthread.h的代码?
- 直接找这本书的官方配套代码资源:这类经典教材的作者通常会在自己的大学课程页面或者专门的配套网站上放出完整的代码包,里面就包含
sthread.h和对应的实现文件(比如sthread.c)。你可以搜索书名加上"supporting code"或者"course materials",就能找到下载入口。 - 不少高校的操作系统课程会用这本书当教材,他们的课程网站上也可能分享这套配套代码,你也可以找找这类资源。
Windows系统上编译的注意事项
如果是用书中的pthread示例代码,或者用sthread库,在Windows上编译需要分情况处理:
- 用MinGW/MinGW-w64编译器:
- 编译pthread代码时,必须加上
-pthread编译参数,用来链接线程库。如果是用sthread的话,要把sthread.c和你的代码一起编译,比如执行命令:gcc your_thread_code.c sthread.c -o thread_program -pthread
- 编译pthread代码时,必须加上
- 用Visual Studio(MSVC编译器):
- MSVC本身不原生支持POSIX pthread,如果你想继续用书中的pthread代码,可以安装第三方的pthreads-win32库,然后在项目中配置头文件路径和链接库路径。
- 如果是用sthread库,直接把
sthread.h和sthread.c添加到你的VS项目里就行,但要注意检查sthread的实现是否依赖POSIX特有的API,如果有的话,可能需要做少量修改,或者干脆用MinGW这类支持POSIX环境的编译器会更省心。
另外,你提供的代码片段没写完,我补全了一个完整的示例方便你参考:
#include <stdio.h> #include <pthread.h> static void* go(void* n); #define NTHREADS 10 static pthread_t threads[NTHREADS]; int main(int argc, char **argv) { int ii; for(ii = 0; ii < NTHREADS; ii++) { pthread_create(&threads[ii], NULL, go, (void*)(long)ii); } for(ii = 0; ii < NTHREADS; ii++) { pthread_join(threads[ii], NULL); } return 0; } static void* go(void* n) { int thread_num = (long)n; printf("Thread %d says hello\n", thread_num); pthread_exit(NULL); }
内容的提问来源于stack exchange,提问作者Little Max
相关产品推荐
相关产品推荐

