多线程技术----最简单的demo开始之linux版
来源:互联网 发布:淘宝店铺违规24分 编辑:程序博客网 时间:2024/05/16 08:50
本文主要转载
http://blog.csdn.net/monkey_d_meng/article/details/5628663,感谢作者的分享。
整理此博客,主要是为了假以时日,方便复习。与上篇博客一样,本文旨在通过最简单的demo,熟悉核心的函数,掌握多线程的使用。
Linux进程与线程
Linux进程创建一个新线程时,线程将拥有自己的栈(因为线程有自己的局部变量),但与它的创建者共享全局变量、文件描述符、信号句柄和当前目录状态。
Linux通过fork创建子进程与创建线程之间是有区别的:fork创建出该进程的一份拷贝,这个新进程拥有自己的变量和自己的PID,它的时间调度是独立的,它的执行几乎完全独立于父进程。
进程可以看成一个资源的基本单位,而线程是程序调度的基本单位,一个进程内部的线程之间共享进程获得的时间片。
Demo
</pre><pre name="code" class="cpp">#include <pthread.h>#include <stdio.h>#include <stdlib.h>#include <string.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!/n"); exit(EXIT_FAILURE); } printf("Thread joined, it returned %s/n", (char *)thread_result); printf("Message is now %s/n", message); exit(EXIT_FAILURE);}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 your CPU time!");}
核心函数
大多数pthread_XXX系列的函数在失败时,并未遵循UNIX函数的惯例返回-1,这种情况在UNIX函数中属于一少部分。如果调用成功,则返回值是0,如果失败则返回错误代码。
1.线程创建:
#include<pthread.h>
int pthread_create(pthread_t *thread, pthread_attr_t *attr, void*(*start_routine)(void *), void *arg);
参数说明:
thread:指向pthread_create类型的指针,用于引用新创建的线程。
attr:用于设置线程的属性,一般不需要特殊的属性,所以可以简单地设置为NULL。
*(*start_routine)(void*):传递新线程所要执行的函数地址。
arg:新线程所要执行的函数的参数。
调用如果成功,则返回值是0,如果失败则返回错误代码。
2.线程终止:
#include<pthread.h>
void pthread_exit(void *retval);
参数说明:
retval:返回指针,指向线程向要返回的某个对象。
线程通过调用pthread_exit函数终止执行,并返回一个指向某对象的指针。注意:绝不能用它返回一个指向局部变量的指针,因为线程调用该函数后,这个局部变量就不存在了,这将引起严重的程序漏洞。
3.线程同步:
#include<pthread.h>
int pthread_join(pthread_t th, void **thread_return);
参数说明:
th:将要等待的线程,线程通过pthread_create返回的标识符来指定。
thread_return:一个指针,指向另一个指针,而后者指向线程的返回值。
- 多线程技术----最简单的demo开始之linux版
- 多线程技术----最简单的demo开始之windows版
- 多线程专题之最简单的线程
- 微信小程序之最简单的Demo设计使用
- 最简单的Tkinter demo
- SimpleAdapter最简单的Demo
- spec 最简单的demo
- 最简单的多线程
- 最简单的makefile开始
- 第四章Linux多线程简单Demo
- 最简单的Hibernate DEMO配置
- 最简单的SPRING DEMO 程序
- 世界上最简单的log4 demo 程序
- 世界上最简单的 junit demo 程序
- 世界上最简单的Xdoclect demo
- 【C#】最简单的写日志DEMO
- Spring最简单的Java Project Demo
- spring mvc最简单的demo
- linux硬盘分区讲解
- Hadoop2.4.1分布式安装(详细)
- 关于Activity和Fragment的规范使用和系统回收activity的处理
- Android 之版本更新
- IOS-Nsstring
- 多线程技术----最简单的demo开始之linux版
- 解决修改css或js文件,浏览器缓存更新问题。
- 基于ROS_Arduino室内移动机器人SLAM实验测试
- 杭电acm2709
- es小常识1
- Java JDBC批处理插入数据操作
- Local declaration of 'XXX' hides instance variable
- C++ CCF真题----画图
- JQuery__jquery控制select的text/value值为选中状态