linux线程(一)基本应用

有感而发(可以直接忽略~):每次要用到线程,都要在网上重新学下基础,例子倒是不少:一种是排版好,讲的不全又不是自己想要的;一种是排版不好,直接略过了。两者兼有的又要苦苦寻找,所以还是自己总结了,觉得每个程序员都得了一种看别人不顺眼的病,哈哈。希望大家批评指正,我这个排版和总结有什么可优化的,绝对尽力而为。
本文主要介绍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     /*wait thread exit.*/
20     sleep(1);
21     return 0;
22 }
23 int main(int argc, char *argv[])
24 {
25     thread_test();
26     return 0;
27 }
View Code

此代码中存在一处内存泄漏问题,详情点击此处跳转

 

线程退出函数原型:

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 void thread_function(void *param)
 5 {
 6     printf("this is a thread.\n");
 7     sleep(2);
 8     pthread_exit((void *)2);
 9 }
10 int thread_test(void)
11 {
12     pthread_t thread_id;
13     int ret;
14     int *retval;
15     ret = pthread_create(&thread_id, NULL, (void *)&thread_function, NULL);
16     if(ret != 0) {
17         printf("pthread_create fail\n");
18         return -1;
19     }
20     ret = pthread_join(thread_id, (void *)&retval);
21     if(ret != 0) {
22         printf("pthread_join fail\n");
23         return -1;
24     }
25     printf("thread return value is %d\n", retval);
26 }
27 int main(int argc, char *argv[])
28 {
29     thread_test();
30     return 0;
31 }
View Code
 
取消线程函数原型:
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 }
View Code

 

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

转载于:https://www.cnblogs.com/zSir-2015/p/4890483.html

以下是对提供的参考资料的总结,按照要求结构化多个要点分条输出: 4G/5G无线网络优化与网规案例分析: NSA站点下终端掉4G问题:部分用户反馈NSA终端频繁掉4G,主要因终端主动发起SCGfail导致。分析显示,在信号较好的环境下,终端可能因节能、过热保护等原因主动释放连接。解决方案建议终端侧进行分析处理,尝试关闭节电开关等。 RSSI算法识别天馈遮挡:通过计算RSSI平均值及差值识别天馈遮挡,差值大于3dB则认定有遮挡。不同设备分组规则不同,如64T和32T。此方法可有效帮助现场人员识别因环境变化引起的网络问题。 5G 160M组网小区CA不生效:某5G站点开启100M+60M CA功能后,测试发现UE无法正常使用CA功能。问题原因在于CA频点集标识配置错误,修正后测试正常。 5G网络优化与策略: CCE映射方式优化:针对诺基亚站点覆盖农村区域,通过优化CCE资源映射方式(交织、非交织),提升RRC连接建立成功率和无线接通率。非交织方式相比交织方式有显著提升。 5G AAU两扇区组网:与三扇区组网相比,AAU两扇区组网在RSRP、SINR、下载速率和上传速率上表现不同,需根据具体场景选择适合的组网方式。 5G语音解决方案:包括沿用4G语音解决方案、EPS Fallback方案和VoNR方案。不同方案适用于不同的5G组网策略,如NSA和SA,并影响语音连续性和网络覆盖。 4G网络优化与资源利用: 4G室分设备利旧:面对4G网络投资压减与资源需求矛盾,提出利旧多维度调优策略,包括资源整合、统筹调配既有资源,以满足新增需求和提质增效。 宏站RRU设备1托N射灯:针对5G深度覆盖需求,研究使用宏站AAU结合1托N射灯方案,快速便捷地开通5G站点,提升深度覆盖能力。 基站与流程管理: 爱立信LTE基站邻区添加流程:未提供具体内容,但通常涉及邻区规划、参数配置、测试验证等步骤,以确保基站间顺畅切换和覆盖连续性。 网络规划与策略: 新高铁跨海大桥覆盖方案试点:虽未提供详细内容,但可推测涉及高铁跨海大桥区域的4G/5G网络覆盖规划,需考虑信号穿透、移动性管理、网络容量等因素。 总结: 提供的参考资料涵盖了4G/5G无线网络优化、网规案例分析、网络优化策略、资源利用、基站管理等多个方面。 通过具体案例分析,展示了无线网络优化中的常见问题及解决方案,如NSA终端掉4G、RSSI识别天馈遮挡、CA不生效等。 强调了5G网络优化与策略的重要性,包括CCE映射方式优化、5G语音解决方案、AAU扇区组网选择等。 提出了4G网络优化与资源利用的策略,如室分设备利旧、宏站RRU设备1托N射灯等。 基站与流程管理方面,提到了爱立信LTE基站邻区添加流程,但未给出具体细节。 新高铁跨海大桥覆盖方案试点展示了特殊场景下的网络规划需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值