码迷,mamicode.com
首页 > 编程语言 > 详细

linux线程--基本应用

时间:2015-10-19 00:35:12      阅读:286      评论:0      收藏:0      [点我收藏+]

标签:

有感而发(可以直接忽略~):每次要用到线程,都要在网上重新学下基础,例子倒是不少:一种是排版好,讲的不全又不是自己想要的;一种是排版不好,直接略过了。两者兼有的又要苦苦寻找,所以还是自己总结了,觉得每个程序员都得了一种看别人不顺眼的病,哈哈。希望大家批评指正,我这个排版和总结有什么可优化的,绝对尽力而为。
本文主要介绍linux下线程的基本应用,列举了几个常用函数的用法及实例。
头文件 pthread.h
编译选项需要加 -pthread
常用函数
线程创建函数原型:
1 int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);
参数说明:
thread:线程ID
attr:线程属性,通常设为NULL(用到其他属性,再来补充)
start_route():线程入口函数
arg:线程入口函数参数
例:
 1 #include <stdio.h>
 2 #include <unistd.h>
 3 #include <pthread.h>
 4 
 5 void thread_function(void *param)
 6 {
 7     printf("this is a thread.\n");
 8 }
 9 int thread_test(void)
10 {
11     pthread_t thread_id;
12     int ret;
13     ret = pthread_create(&thread_id, NULL, (void *)&thread_function, NULL);
14     if(ret != 0) {
15         printf("pthread_create fail\n");
16         return -1;
17     }
18    
19     /*主要是为了看到线程的打印*/
20     sleep(1);
21        
22 }
23 int main(int argc, char *argv[])
24 {
25     thread_test();
26     return 0;
27 }

线程退出函数原型:

1 void pthread_exit(void *retval);
说明:
用于线程的主动退出,与return作用基本相同,但pthread_cleanup_push()和pthread_cleanup_pop()不接收return返回值。
若要在线程中终止另一个线程,需要用pthread_cancel();
参数说明:
retval:线程结束时的返回值,可由其他函数获取,如pthread_join()。
 
等待线程函数原型:
1 int pthread_join(pthread_t thread, void **retval);
说明:
等待线程退出,在等待期间当前线程将被挂起。
参数说明:
thread:等待线程的ID
retval:等待线程的返回值
例:
 1 #include <stdio.h>
 2 #include <unistd.h>
 3 #include <pthread.h>
 4 pthread_t thread1_id, thread2_id;
 5 void thread_function1(void *param)
 6 {
 7     printf("this is a thread 2.\n");
 8     while(1) {
 9         printf("thread 1 is running.\n");
10         sleep(1);
11     }
12     printf("thread 1 exit.\n");
13 }
14 void thread_function2(void *param)
15 {
16     printf("this is a thread 2.\n");
17     sleep(2);
18     printf("thread 2 cancel thread 1.\n");
19     pthread_cancel(thread1_id);
20 }
21 int thread_test(void)
22 {
23     int ret;
24     ret = pthread_create(&thread1_id, NULL, (void *)&thread_function1, NULL);
25     if(ret != 0) {
26         printf("pthread_create fail\n");
27         return -1;
28     }
29     ret = pthread_create(&thread1_id, NULL, (void *)&thread_function2, NULL);
30     if(ret != 0) {
31         printf("pthread_create fail\n");
32         return -1;
33     }
34     ret = pthread_join(thread1_id, NULL);
35     if(ret != 0) {
36         printf("pthread_join fail\n");
37         return -1;
38     }
39 }
40 int main(int argc, char *argv[])
41 {
42     thread_test();
43     return 0;
44 }
取消线程函数原型:
1 int pthread_cancel(pthread_t thread);
说明:
在线程中终止另一个进程。
线程可以设置状态,来决定是否可以被其他线程取消(pthread_setcancelstate),默认可以被取消。
参数说明:
thread:要取消线程的ID
例:
 1 #include <stdio.h>
 2 #include <unistd.h>
 3 #include <pthread.h>
 4 pthread_t thread1_id, thread2_id;
 5 void thread_function1(void *param)
 6 {
 7     printf("this is a thread 2.\n");
 8     while(1) {
 9         printf("thread 1 is running.\n");
10         sleep(1);
11     }
12     printf("thread 1 exit.\n");
13 }
14 void thread_function2(void *param)
15 {
16     printf("this is a thread 2.\n");
17     sleep(2);
18     printf("thread 2 cancel thread 1.\n");
19     pthread_cancel(thread1_id);
20 }
21 int thread_test(void)
22 {
23     int ret;
24     ret = pthread_create(&thread1_id, NULL, (void *)&thread_function1, NULL);
25     if(ret != 0) {
26         printf("pthread_create fail\n");
27         return -1;
28     }
29     ret = pthread_create(&thread1_id, NULL, (void *)&thread_function2, NULL);
30     if(ret != 0) {
31         printf("pthread_create fail\n");
32         return -1;
33     }
34     ret = pthread_join(thread1_id, NULL);
35     if(ret != 0) {
36         printf("pthread_join fail\n");
37         return -1;
38     }
39 }
40 int main(int argc, char *argv[])
41 {
42     thread_test();
43     return 0;
44 }

只是简单的介绍了下线程的基本操作,更高级的应用稍后更新敬请期待~~

linux线程--基本应用

标签:

原文地址:http://www.cnblogs.com/zSir-2015/p/4890483.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!