脚本宝典收集整理的这篇文章主要介绍了理解线程1 C语言示例的程序,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
一个简单的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 %sn", (char *)thread_result);
printf("Message is now %sn", message);
exit(EXIT_SUCCESS);
}
void *thread_function(void *arg) {
printf("thread_function is running, Argument was %sn", (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水平啊。
以上是脚本宝典为你收集整理的理解线程1 C语言示例的程序全部内容,希望文章能够帮你解决理解线程1 C语言示例的程序所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。