linux下的shell多线程⽤法,Linux中多线程详解及简单实例linux shell 的 Linux中多线程详解及简单实例
Linux中多线程详解及简单实例
1.概念
进程:运⾏中的程序。
线程:⼀个程序中的多个执⾏路径。更准确的定义是:线程是⼀个进程内部的⼀个控制序列。
2.为什么要有线程?
⽤fork调⽤进程代价太⾼,需要让⼀个进程同时做多件事情,线程就⾮常有⽤。
3.线程的优点和缺点。
优点:
(1)有时,让程序看起来是在同时做两件事是⾮常有⽤的。 ⽐如在编辑⽂档时,还能统计⽂档⾥的单词个数。
(2)⼀个混杂着输⼊、计算、输出的程序,利⽤线程可以将这3个部 分分成3个线程来执⾏,从⽽改变程序执⾏的性能。
(3)⼀般来说,线程之间切换需要操作系统所做的⼯作⽐进程间切换需要的代价⼩。
缺点:
(1)编写线程需要⾮常仔细的设计。
(2)对多线程的调试困难程度⽐单线程调试⼤得多。
4.创建线程
#include
(1)int pthread_create(pthread_t *thread,pthread_attr_t *attr,void *(*start_routine)(void *),void *arg);
pthread_t pthread_self(void);
(2)int pthread_equal(pthread_t thread1,pthread_t thread2);
(3)int pthread_once(pthread_once_t *once_control,void(*init_routine)(void));
Linux系统⽀持POSIX多线程接⼝,称为pthread。编写linux下的多线程程序,需要包含头⽂件pthread.h,链接时需要使⽤库libpthread.a。
如果在主线程⾥⾯创建线程,程序就会在创建线程的地⽅产⽣分⽀,变成两个部分执⾏。线程的创建通过函数pthread_create来完成。成功返回0。
1.线程创建:
int pthread_create(pthread_t thread,pthread_attr_t *attr,void (start_routine)(void ),void *arg);
pthread_t pthread_self(void);
参数说明:
thread:指向pthread_create类型的指针,⽤于引⽤新创建的线程。
attr:⽤于设置线程的属性,⼀般不需要特殊的属性,所以可以简单地设置为NULL。
(start_routine)(void ):传递新线程所要执⾏的函数地址。
arg:新线程所要执⾏的函数的参数。
调⽤如果成功,则返回值是0,如果失败则返回错误代码。
2.线程终⽌
void pthread_exit(void *retval);
参数说明:
retval:返回指针,指向线程向要返回的某个对象。
线程通过调⽤pthread_exit函数终⽌执⾏,并返回⼀个指向某对象的指针。注意:绝不能⽤它返回⼀个指向局部变量的指针,因为线程调⽤该函数后,这个局部变量就不存在了,这将引起严重的程序漏洞。
3.线程同步
int pthread_join(pthread_t th, void **thread_return);
参数说明:
th:将要等待的线程,线程通过pthread_create返回的标识符来指定。
thread_return:⼀个指针,指向另⼀个指针,⽽后者指向线程的返回值。
⼀个简单的创建多线程的程序:
#include
#include
#include
#include
void *thread_function(void *arg);
char message[] = "Hello World";
int main()
{
int res;linux下的sleep函数
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 /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!");
}
输出结果
$./thread1[输出]:
thread_function is running. Argument was Hello World
Waiting for thread
Thread joined, it returned Thank you for your CPU time!
Message is now Bye!
以上就是Linux 多线程的实例详解,如有疑问请留⾔或者到本站社区交流讨论,感谢阅读,希望能帮助到⼤家,谢谢⼤家对本站的⽀持!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论