abstract:一个简单的C语言实现的线程示例在看《Beginning Linux Programming》时,为了更好的理解线程的概念,书中列举了这样一个小例子:#include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <string.h> #in
一个简单的C语言实现的线程示例
在看《Beginning Linux Programming》时,为了更好的理解线程的概念,书中列举了这样一个小例子:
#include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <string.h> #include <pthread.h> void *thread_function(void *arg); char message[] = "Hello World"; int main() { int res; pthread_t a_thread; void *thread_result; res = pthread_create(&a_thread, NULL, thread_function, (void *)message); if (res != 0) { perror("Thread creation failed"); exit(EXIT_FAILURE); } printf("Waiting for thread to finish...\n"); res = pthread_join(a_thread, &thread_result); if (res != 0) { perror("thread join failed"); exit(EXIT_FAILURE); } printf("Thread joined, it returned %s\n", (char *)thread_result); printf("Message is now %s\n", message); exit(EXIT_SUCCESS); } void *thread_function(void *arg) { printf("thread_function is running, Argument was %s\n", (char *)arg); sleep(3); strcpy(message, "Bye!"); pthread_exit("Thank you for the CPU time"); }
将程序编译链接后运行,可以看到下面这样的结果
➜ chapter12 ./thread Waiting for thread to finish... thread_function is running, Argument was Hello World Thread joined, it returned Thank you for the CPU time Message is now Bye!
这里使用 pthread_create 创建新线程, pthread_create 的定义如下:
#include <pthread.h> int pthread_create(pthread_t *thread, pthread_attr_t *attr, void *(*start_routine)(void *), void *arg);
根据 pthread_create 要求, thread_function 只有一个指向void的指针作为参数,返回的也是指向void的指针。
当创建新的线程后,新线程在 thread_function 中开始执行,打印自己的参数。
原有线程在确保新线程启动后调用 pthread_join 函数等到线程结束,并且将新线程的返回值存在 thread_result 指针里。
新线程可以直接访问 message 数组变量,如果是调用 fork() 的话就没有这种效果。
python也提供了处理线程相关的 thread 和 基于它上面抽象的 threading 等模块,将在以后的文章中探究。
不由感慨,如果不多懂一些C语言,那么很难提高自己Python水平啊。