在看《Beginning Linux Programming》时,为了更好的理解线程的概念,书中列举了这样一个小例子:python
#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水平啊。code